Bash脚本和转义

Bash脚本和转义,bash,Bash,我在使用这个bash脚本时遇到了一些问题,我打算将它用作运行nginx+unicorn的web服务器的启动脚本 DAEMON='/bin/su - deployer -c "/home/deployer/.rvm/gems/ruby-1.9.3-p125/bin/unicorn -c /home/deployer/apps/myapp/current/config/unicorn.rb -E production -D"' 错误: /bin/su:无效选项--“E” 我需要以用户部署者的身份运

我在使用这个bash脚本时遇到了一些问题,我打算将它用作运行nginx+unicorn的web服务器的启动脚本

DAEMON='/bin/su - deployer -c "/home/deployer/.rvm/gems/ruby-1.9.3-p125/bin/unicorn -c /home/deployer/apps/myapp/current/config/unicorn.rb -E production -D"'
错误:

/bin/su:无效选项--“E”


我需要以用户部署者的身份运行脚本,但我不确定如何将所有命令传递给/bin/su。我确信这是一个简单的转义错误,但在尝试了几种不同的转义方法之后,我只是没有正确地理解它。谢谢。

尝试使用
--


命令中没有变量,因此您可以简单地将其放入函数中:

daemon() {
    /bin/su - deployer -c "/home/deployer/.rvm/gems/ruby-1.9.3-p125/bin/unicorn -c /home/deployer/apps/myapp/current/config/unicorn.rb -E production -D"
}

为什么要将整个su命令链指定给一个变量?您必须使用
eval“$DAEMON”
才能让它工作,而且每个人都讨厌eval代码(这是一个很大的安全风险)。祝你好运。当我注意到我必须以用户“部署者”的身份运行这个初始化脚本时,这是我想到的第一件事。更好的方法是受欢迎的。为什么命令是一个变量?这里对于更好的解决方案的隐含建议是不要将命令放入变量中。另见@tripleee啊。我不明白。好主意!事实上,这个链接一直是我需要阅读的,但我自己从来没有找到过。写下你的评论作为回答,我会接受的。@Shelleter在这里真的值得称赞。不过,很高兴我能帮助澄清他的(?)观点。
daemon() {
    /bin/su - deployer -c "/home/deployer/.rvm/gems/ruby-1.9.3-p125/bin/unicorn -c /home/deployer/apps/myapp/current/config/unicorn.rb -E production -D"
}