Bash - 查找脚本并执行选项
我自己做了很多搜索和测试,但似乎无法找到实现此目标的最佳方法。我想有一个bash脚本,可以在机器上找到一个脚本,执行脚本并能够在我的情况下添加交换机或所需信息,以便成功执行脚本。Bash - 查找脚本并执行选项
为了得到更具体一点,我在卡利Linux和我运行定位命令,像这样:
定位pattern_create
返回:
的/ usr /share/metasploit-framework/tools/pattern_create.rb
所以我想把它编成xargs来运行这样的脚本:
locate pattern_create | xargs的红宝石
但当然我不能指定我需要将成功运行该脚本的选项,这将是:
红宝石在/ usr /共享/ Metasploit的框架/工具/ pattern_create .rb 2700
我想出了一个解决方法,但我觉得它有点草率,这可以做得更容易,这就是我希望我能得到任何输入/反馈的地方。
我发现我可以运行:
pattern_create = $(定位pattern_create)& &红宝石$ pattern_create 2700
得到正是我需要的,但后来我处理环境当我经常这样做时,我不想要一堆变量。如果可能的话,我希望能够用xargs或者甚至更干净的方法来解决这个问题。我知道这可以使用find -exec轻松完成,但在我没有存储脚本的情况下,这不起作用。
任何帮助都会很棒,我很欣赏每个人的时间。谢谢。
你可以这样做:
ruby $(locate pattern_create)
但要注意,如果有通过locate
返回多行,那么这可能不是你想要的。
这是一件很危险的事情,因为你不知道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
这是完美的!我明白发出这个命令时的警惕。我的想法是验证脚本在那里,我发现它'找到',然后'↑'回到'找到'。接下来,用你的建议重写命令并添加所需的参数。最终,我是这样管道入xclip:'ruby $(locate pattern_create)2700 | xclip -selection c' –
Matthew
@Matthew您的方法很好,IMO。如果你只是不想在你的环境中有变量,你可以* unset * it:'var = $(locate pattern_create)&& ruby $ var 2700;未设置var'。另外,请注意'locate'使用一个可能没有最新信息的数据库。它甚至可能无法找到您的系统上实际存在的文件。 'find'命令是一个更好的选择。 –
当你不确定确切的路径时,是否有更好的方法来使用find?我不确定是否有这种能力。 – Matthew