2012-02-19 109 views
1

我在使用這個bash腳本時遇到了一些麻煩,我打算用它作爲運行nginx + unicorn的web服務器的啓動腳本。Bash腳本編寫和轉義

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: invalid option -- 'E'

我需要運行該腳本的用戶部署,但我不確定如何我所有的命令通過爲/ bin /蘇。我確信這是一個簡單的逃避錯誤,但嘗試了幾種不同的方式逃避它,但我沒有得到這個正確的。謝謝。

+3

你爲什麼整個分配su命令鏈變量?你必須使用'eval「$ DAEMON」'來使它工作,並且每個人都討厭評估代碼,(它有很大的安全風險)。祝你好運。 – shellter 2012-02-19 18:38:30

+0

當我注意到我必須以用戶的「部署者」身份運行此初始化腳本時,這是我首先想到的。更好的方式來做它是受歡迎的。 – 2012-02-19 19:25:49

+3

爲什麼命令在變量中?這裏隱含的一個更好的解決方案是不把命令放在變量中。另見http://mywiki.wooledge.org/BashFAQ/050 – tripleee 2012-02-19 20:01:28

回答

2

嘗試與--

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"' 
+0

不,沒有做到。 – 2012-02-19 19:44:04

1

分開sudo的選項和命令有命令中沒有變量,所以你可以簡單地把它放在一個函數:

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" 
}