BASH:“Quoted out”:在单引号内传递变量

时间:2015-10-12 10:59:39

标签: bash debian parameter-passing

我需要为cron自动运行脚本“myscript”。它需要一些dbus功能,所以我必须创建一个调用myscript的包装脚本,如下所示:

#!/bin/bash
# this is a wrapper script
# Do some computation here
env `dbus-launch` sh -c 'trap "kill $DBUS_SESSION_BUS_PID" EXIT; /home/username/bin/myscript myarguments'

如果我硬编码'myarguments'的值,一切都按预期工作。但是,如果包装器从命令行得到'myarguments',我就不知道如何将它传递给myscript。

(是的, 我可以将值写入文件,并让myscript读取它,但非常感谢bash-only解决方案)

2 个答案:

答案 0 :(得分:1)

您可以使用$ 1作为脚本接收的第一个参数的引用。 如果你的'myarguments'值中有空格,你必须引用它。 您可以找到搜索'bash arguments'的更多详细信息。 如果您不在引用的字符串之间放置任何空格,则可以将多个带引号的字符串作为一个参数传递。 例如:

env `dbus-launch` sh -c 'trap "kill $DBUS_SESSION_BUS_PID" EXIT; /home/username/bin/myscript '"$1"

答案 1 :(得分:1)

技巧是在引用它们的包装脚本中将所有参数作为一个传递:

$> wrapper-script.sh "param1 param2 param3"

#!/bin/bash
# this is a wrapper script
# Do some computation here
env `dbus-launch` sh -c 'trap "kill $DBUS_SESSION_BUS_PID" EXIT; /home/username/bin/myscript'"${@}"

通过这种方式sh -c正确解析它们(注意"${@}"之前的结束单引号)

相关问题