我自己做了很多搜索和测试,但我似乎无法找到实现这一目标的最佳方法。我希望有一个bash one liner,可以在机器上找到一个脚本,执行脚本,并能够在我的情况下添加开关或所需信息,以便成功执行脚本。
为了更具体一点,我在Kali Linux中运行locate命令,如下所示:
找到pattern_create
返回:
/usr/share/metasploit-framework/tools/pattern_create.rb
所以我考虑将它管道化为xargs来运行脚本,如下所示:
找到pattern_create | xargs ruby
但当然我无法指定成功运行脚本所需的选项,即:
ruby /usr/share/metasploit-framework/tools/pattern_create.rb 2700
我想出了一个解决方案,但我觉得它有点草率,这可以做得更容易,而且我希望我能得到任何输入/反馈。
我发现我可以跑:
pattern_create = $(locate pattern_create)&& ruby $ pattern_create 2700
得到我需要的东西,但后来我正在处理环境变量,在经常这样做时我不想要一堆。我希望用xargs或者甚至更清洁的方式解决这个问题,如果可能的话。我知道这可以通过find -exec轻松完成,但是在我没有存储脚本的情况下这不会起作用。
任何帮助都会很棒,我感谢大家的时间。谢谢。
答案 0 :(得分:0)
你可以这样做:
ruby $(locate pattern_create)
但请注意,如果locate
返回多行,则可能无法执行您想要的操作。
答案 1 :(得分:0)
这是一件危险的事情,因为你不知道locate
会返回什么,你最终可能会执行任意脚本。我建议您使用一个中间脚本来防止意外,例如找不到脚本或找到多个脚本。
#! /bin/sh
#
if [ $# -eq 0 ]
then
echo >&2 "Usage: $0 script arguments"
exit -1
fi
script=$(locate $1)
numfound=$(locate $1 | 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