我需要为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解决方案)
答案 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
正确解析它们(注意"${@}"
之前的结束单引号)