2013-03-08 38 views
2
#!/bin/bash 

sudo -u rei_sh -H -s <<-EOM 

echo "hi" 

for i in $(find -name *.properties) 

do 

echo "ivalue is \$i" 

done 

exit 

EOM 

我正在使用上面的這段代碼。sudo通過find命令在這裏輸出文件後循環輸出

當我運行代碼時只打印「hi」。

但如果我「在一個二爲我」使用下面的被印刷

ivalue is one 
ivalue is two. 

爲什麼我不能遍歷的輸出找到了這裏的文件裏面的命令?

+0

請注意,<< <<與'<< - '在這裏一樣好,因爲HEREDOC從來不會被人眼看到。 (因爲沒有縮進,所以它們完全相同)。 – 2013-03-08 10:51:46

回答

3

因爲$(...)在...的sudo踢之前運行,你需要引用EOM

sudo -u rei_sh -H -s <<-'EOM' 
    echo "hi" 
    for i in $(find -name *.properties) 
    do 
     echo "ivalue is $i" 
    done 
EOM 

exit是多餘的。使用EOM附近的引號,您也不需要在echo命令中轉義$。您也可以在$(...)之前逃過$,以防止執行命令前的sudo shell。

+0

Hi @ Jonathan.i與'EOM'一起嘗試過,仍有相同的結果。只需「打印」即可。請諮詢。在發佈這個問題之前,我嘗試在$(...)之前轉義$,這也沒有用。 – Jacksonvj 2013-03-08 11:36:20

+0

哦,小提琴! 'find'命令應該是固定的。 '找。 -name'* .properties'''左右,但你應該從它收到錯誤信息,我想。 – 2013-03-08 15:40:02

0

進程替換&變量擴展發生在處理heredocs之前。

嘗試轉義$ signs & glob(*)。