用一个 ;或 && 与 $@

用一个 ;或 && 与 $@

我正在尝试用 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"

相关内容