bash中带空格的回调脚本

时间:2012-02-20 17:48:16

标签: linux bash callback arguments

我编写了一个检查内容的小脚本,如果测试成功,我希望在脚本中执行命令。我不想对命令进行硬编码,而是将其作为参数提供给它,就像回调脚本一样。

我测试的命令是/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时,它会抱怨无法找到该文件。任何人都有想法如何解决空间的行为?

4 个答案:

答案 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