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
我自己进行了大量搜索和测试,但似乎找不到实现此目标的最佳方法。我想要一个 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