为什么在主管中使用`bash -c`而不是直接调用脚本?

Modified on: Thu, 17 Oct 2019 13:00:02 +0800

我开始使用supervisord来控制服务器中的服务。我不是Linux的专业用户,但可以很好地使用它并让它运行。

出于好奇,我注意到supervisord中的大多数命令似乎被称为:

[program:install] command=bash -c "/src/etc/install.sh"

我读过bash的人,并且知道应该使用-c来插入在字符串之后传递的变量。

那么在主管(或任何其他地方)使用bash -c而不是直接调用脚本(如下例所示)的重点是什么,考虑到没有传递/使用的变量?

[program:install] command=/src/etc/install.sh

谢谢!

最佳答案

Shell功能,例如路径名扩展(*?),命令列表(;&&||),重定向(<>|)未实现supervisord只将命令拆分为参数字符串数组。

bash -c可能只是新手用户的帮助,他们可能会想要在命令中使用这些功能。例如,它避免了意外

command=echo foo > /tmp/bar

输出foo > /tmp/bar而不是将foo写入/tmp/bar

-c与变量几乎没有关系。 bash的任何其他参数只能在命令中作为脚本参数$0$1等使用,但该功能很少使用。例如bash -c 'echo $0 $0' foo输出foo foo

作者:kohtala

相关问答

添加新评论