我编写了一个检查内容的小脚本,如果测试成功,我希望在脚本中执行命令。我不想对命令进行硬编码,而是将其作为参数提供给它,就像回调脚本一样。
我测试的命令是/usr/bin/xmessage -buttons "button a","button b" some text to test
。在独立终端内运行它可以正常工作,最后一个文本不需要引号。
脚本如下所示:
#!/bin/bash
echo "$1"
$1
但是当/path/to/script.bash '/usr/bin/xmessage -buttons "button a","button b" some text to test'
运行时它看起来像this,虽然回声看起来是正确的。
使用"$1"
代替$1
时,它会抱怨无法找到该文件。任何人都有想法如何解决空间的行为?
答案 0 :(得分:1)
您需要使用数组。
请参阅以下有关如何解决问题的链接:I'm trying to put a command in a variable, but the complex cases always fail!
答案 1 :(得分:1)
我认为你应该使用eval
:
#!/bin/bash
echo "$1"
eval $1
答案 2 :(得分:1)
我建议你写这样的剧本:
#!/bin/bash
echo ${1+"$@"}
${1+"$@"}
并称之为:
/path/to/script.bash /usr/bin/xmessage -buttons "button a","button b" some text to test
答案 3 :(得分:1)
尝试eval "$1"
或重新设计,以便在所有选项后指定回调 - 常见的排列方式如script.bash -options arguments etc -- /usr/bin/xmessage -buttons "button a","button b" some text to test