2012-01-24 23 views
0

我正在windows cygwin下運行一個bash腳本。

重要提示:

我從COMMAND.EXE窗口中運行bash腳本,如:

bash.exe myscript.sh

該腳本將做一個亞行外殼和PS/AWK /殺死一個進程。 Android已經紮根。下面的腳本除了awk部分外,還可以工作。看起來,在窗口下運行這個東西使得美元符號在2美元無效。所以最後一個awk部分不起作用。幫幫我!

#!/bin/bash  -x  
C:/scripts/adb.exe shell << EOF 
su 
ls 
ps | grep "myapp" | echo awk '{print $2}' 
EOF 

輸出我從這個腳本獲得:

# awk {print } 

回答

0

你將不得不做這樣的事情

ps | grep "myapp" | awk '{print $2}' 

awk工具需要從管道或文件的輸入。當您執行命令echo後,shell會將其解釋爲純文本。

0

當使用here文件時,所有的$ var作爲處理的一部分被shell評估。

我想你可以通過轉義'\'字符,即'\ $ 2'來轉義任何'$'(用於變量或shell parms等),對於你的情況,是

編輯:你的代碼有一個額外的單詞,'回聲',我已經從下面的解決方案中刪除。

#!/bin/bash  -x  
C:/scripts/adb.exe shell << EOF 
su 
ls 
ps | grep "myapp" | awk '{print \$2}' 
EOF 

或者你可以「報價」全在這裏,文件可以援引EOF,即

#!/bin/bash  -x  
C:/scripts/adb.exe shell <<'EOF' 
su 
ls 
ps | grep "myapp" | awk '{print $2}' 
EOF 

注意,右EOF應該被引用。

我希望這會有所幫助。

P.S.歡迎使用StackOverflow(SO)請記住閱讀常見問題http://tinyurl.com/2vycnvr,使用灰色三角形http://i.imgur.com/kygEP.png投票選出Q/A,並通過按複選標記http://i.imgur.com/uqJeW.png接受解決問題的答案(如果有的話)

+0

對不起,我不知道實施中的差異。 +1爲一個優秀的漫步。 –

+0

不幸的是斜槓或引用EOF不起作用。在這兩種情況下,輸出現在是:#awk {print $ 2} – user848106

+0

@ user848106:Doah,請注意您的代碼'echo awk'{print $ 2}''!它按照設計工作;-)。刪除回聲,你應該得到管道流的處理。祝你好運 – shellter