2012-10-22 80 views
4

我有一個shell腳本,我希望在不同的Linux服務器上運行。當我使用-e選項運行echo命令並在字符串中轉義字符時,它不會像Ubuntu 12.04或Ubuntu 11.04上的sh shell那樣按預期執行。我們希望腳本能夠使用的兩臺服務器正在運行CentOS 5.3和Ubuntu 12.04。當我在bash兩個服務器上運行下面的命令的預期輸出產生:echo -e反斜槓轉義在sh中沒有得到尊重

$ echo -e "line1\nline2" 
line1 
line2 

當我在SH CentOS的機器正確的輸出也產生上運行相同的命令。但是,當我在SH在Ubuntu 12.04 11.04或運行該命令的如下輸出產生:

$ echo -e "line1\nline2" 
-e line1 
line2 

有趣如果我在SH在Ubuntu它自動地解釋轉義字符運行的下方。

$ echo "line1\nline2" 
line1 
line2 

腳本需要在sh shell中運行,並且應該可以跨不同的機器移植。任何解決方案我也很欣賞鏈接到一些文檔解釋爲什麼或如何發生這種事情。

回答

5

Ubuntu中的sh shell是dash。它的內置回聲沒有-e選項(因此它只是迴應它,如你所見),或者說,它沒有辦法將退出行爲關閉。

改爲使用/bin/echo

要檢查你使用的嘗試echo $SHELL

$ echo $SHELL 
/bin/bash 
+0

優秀!非常感謝,非常感謝。 –

+2

@MarwanAlsabbagh'/ bin/echo'不是一個好的選擇。如果你真的想使用'/ bin/sh',使用'printf',否則使用不同的shell。 – ormaaj

+0

很好,甚至更好 –

0

echo是實現之間不一致無可救藥什麼殼;如果您需要平凡的應用程序一致的行爲(例如轉義序列),使用printf來代替(記得要加一個最終\ n明確):

$ printf "line1\nline2\n" 
line1 
line2