我正在尝试用 cron 包装器做一些事情,我的 cron 看起来像
* * * * * root /usr/bin/wrapper cd /tmp/ && ls
然后包装看起来像
#!/bin/bash
"$@"
当我运行它时,我无法让分号或 && 按我希望的方式工作。
[[email protected] ~/test]# pwd
/root/test
[[email protected] ~/test]# ls
test.sh
[[email protected] ~/test]# ./test.sh cd /tmp && ls
test.sh
所以在这种情况下,它会进入 tmp,然后 weapper 脚本退出..并且它在我的 cwd 中运行 ls 。
如果我在命令周围添加 '' 我得到
[[email protected] ~/test]# ./test.sh 'cd /tmp && ls'
./test.sh: line 3: cd /tmp && ls: No such file or directory
我猜测“$@”它试图将单引号添加到正在运行的命令中
我支持我可以去掉“$@”之前的单引号,但我希望不要这样做..有任何提示吗?或者这是否可以在 bash 中解决?
答案1
/usr/bin/wrapper cd /tmp/ && ls
被解析为(/usr/bin/wrapper cd /tmp/) && ls
.即使您确实设法正确地传递参数wrapper
,它也无法理解它们;&&
是一个外壳结构。我不确定您使用此包装器脚本的确切目的是什么,但我怀疑您可以将其替换为bash -c
,它接受一个字符串并告诉 bash 对其进行评估,就像您直接将其输入到 shell 中一样:
* * * * * root bash -c "cd /tmp/ && ls"