Bash - 找到脚本并使用选项执行

Bash - Locate Script and Execute with Options

我自己进行了大量搜索和测试,但似乎找不到实现此目标的最佳方法。我想要一个 bash one liner,它可以在机器上找到一个脚本,执行脚本并能够添加开关或在我的情况下成功执行脚本所需的信息。

更具体一点,我在 Kali Linux 中 运行 定位命令如下:

locate pattern_create

哪个returns:

/usr/share/metasploit-framework/tools/pattern_create.rb

所以我考虑将其通过管道传输到 xargs 到 运行 脚本,如下所示:

locate pattern_create | xargs ruby

但当然我无法指定我需要的选项,运行 脚本会成功,这将是:

ruby /usr/share/metasploit-framework/tools/pattern_create.rb 2700

我想出了一个变通办法,但我觉得它有点草率,这可以做得更容易,这就是我希望我能得到任何 input/feedback.

我发现我可以 运行:

pattern_create=$(locate pattern_create) && ruby $pattern_create 2700

得到我需要的东西,但是我正在处理环境变量,我不希望经常这样做。我希望用 xargs 解决这个问题,或者如果可能的话甚至更干净的方法。我知道这可以通过 find -exec 轻松完成,但在我不在脚本存储位置的情况下这不起作用。

任何帮助都会很棒,感谢大家抽出时间。谢谢。

你可以这样做:

ruby $(locate pattern_create)

但请注意,如果 locate 返回多行,那么这可能无法满足您的要求。

这是一件危险的事情,因为您不知道 locate 将 return 做什么,您最终可能会执行任意脚本。我建议您使用一个中间脚本来防止意外情况,例如找不到脚本或找到多个脚本。

#! /bin/sh
#
if [ $# -eq 0 ]
then
    echo >&2 "Usage: [=10=] script arguments"
    exit -1
fi
script=$(locate )
numfound=$(locate  | wc -l)
shift
if [ $numfound -eq 1 ]
then
    # Only run the script if exactly one match is found
    ruby $script $*
elif [ $numfound -eq 0 ]
then
    echo "No matching scripts found" >&2
    exit -1
else
    echo "Too many scripts found - $script" >&2
    exit -1
fi