teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2016/04/25 07:54

投稿

ngyuki
ngyuki

スコア4516

answer CHANGED
@@ -3,4 +3,37 @@
3
3
  ```sh
4
4
  CMD= "sudo su - foo -c \"cd /home/foo/rails_app; bundle exec unicorn -c config/unicorn.rb -D\""
5
5
  eval "$CMD"
6
- ```
6
+ ```
7
+
8
+ ----
9
+
10
+ ```sh
11
+ CMD="sudo su - foo -c \"cd /home/foo/rails_app; bundle exec unicorn -c config/unicorn.rb -D\""
12
+ $CMD
13
+ ```
14
+
15
+ これですと、`$CMD` には下記の通りの文字列が入りますが、
16
+
17
+ ```sh
18
+ sudo su - foo -c "cd /home/foo/rails_app; bundle exec unicorn -c config/unicorn.rb -D"
19
+ ```
20
+
21
+ `$CMD` で実行したときには単純に空白で区切られて次のようにコマンドラインが解釈されます。
22
+
23
+ ```
24
+ sudo
25
+ su
26
+ -
27
+ foo
28
+ -c
29
+ "cd
30
+ /home/foo/rails_app;
31
+ bundle
32
+ exec
33
+ unicorn
34
+ -c
35
+ config/unicorn.rb
36
+ -D"
37
+ ```
38
+
39
+ eval を使えば文字列をシェルが再評価するので `"cd /home/foo/rails_app; bundle exec unicorn -c config/unicorn.rb -D"` の部分を1つの塊と認識させることができます。