回答編集履歴

1

追記

2016/04/25 07:54

投稿

ngyuki
ngyuki

スコア4514

test CHANGED
@@ -9,3 +9,71 @@
9
9
  eval "$CMD"
10
10
 
11
11
  ```
12
+
13
+
14
+
15
+ ----
16
+
17
+
18
+
19
+ ```sh
20
+
21
+ CMD="sudo su - foo -c \"cd /home/foo/rails_app; bundle exec unicorn -c config/unicorn.rb -D\""
22
+
23
+ $CMD
24
+
25
+ ```
26
+
27
+
28
+
29
+ これですと、`$CMD` には下記の通りの文字列が入りますが、
30
+
31
+
32
+
33
+ ```sh
34
+
35
+ sudo su - foo -c "cd /home/foo/rails_app; bundle exec unicorn -c config/unicorn.rb -D"
36
+
37
+ ```
38
+
39
+
40
+
41
+ `$CMD` で実行したときには単純に空白で区切られて次のようにコマンドラインが解釈されます。
42
+
43
+
44
+
45
+ ```
46
+
47
+ sudo
48
+
49
+ su
50
+
51
+ -
52
+
53
+ foo
54
+
55
+ -c
56
+
57
+ "cd
58
+
59
+ /home/foo/rails_app;
60
+
61
+ bundle
62
+
63
+ exec
64
+
65
+ unicorn
66
+
67
+ -c
68
+
69
+ config/unicorn.rb
70
+
71
+ -D"
72
+
73
+ ```
74
+
75
+
76
+
77
+ eval を使えば文字列をシェルが再評価するので `"cd /home/foo/rails_app; bundle exec unicorn -c config/unicorn.rb -D"` の部分を1つの塊と認識させることができます。
78
+
79
+