最近碰到一個神奇的問題,同樣的"echo -e"寫在Makefile裡,執行在不同的Linux環境時(分別執行在Rhel4和Ubuntu18.04),顯示結果竟然不一樣?
先簡單前提一下,“echo -e”會處理後面字串中的特殊字元。舉例如下:
很明顯的,在沒有使用-e參數下,\t被當作一般字元印出來。使用-e參數後,則印出一個tab的空格。
那麼在Makefile中我也寫上同樣的指令,神奇的是,執行Makefile的時候,輸出結果跟我想的不一樣啊~
在Rhel4中,輸出結果一切正常;但在Ubuntu18.04中,執行“echo -e”則會把"-e "也一起印出來。
但在Ubuntu的terminal直接"echo -e"卻又不會把"-e "印出來!
這真是太神奇啦~~
仔細研究以後發現,原來是shell的問題啦~
makefile默認使用的shell為/bin/sh,用指令"$ls -l /bin/sh"可以查出/bin/sh 連結到的是dash。
而terminal中默認使用的shell,用指令"$echo $SHELL"可以查出來,沒有改動過的話通常會是bash。
另外,要查目前terminal中使用的shell,則可以用指令"$echo $0"來查。
知道問題在哪後,就要來找解法啦~
解法也不難,因為makefile中也有一個"$SHELL"的變數,跟系統的"$SHELL"變數互不干擾。
所以如果只有單一個makefile要使用bash的話,只要在makefile前面寫上"SHELL=/bin/bash"就可以完美執行囉~
改完以後的成果
留言列表