Ubuntu- 執行shell script 為什麼常發生 unexpected operator

為什麼?
因為 sh xxxxx.xx 必須看sh預設是用bash或是dash

我就在想是什麼原因,後來終於發現是Ubuntu下sh默認指向dash。
echo $SHELL –> /bin/bash
type sh –> /bin/sh
然後我到/bin下看了有”sh -> dash”,原來sh是/bin/dash的鏈接。

後來google了一下才發現,buntu6.10已將先前默認的bashshell更換為了dash。其表現是/bin/sh鏈接到了/bin/dash而不是傳統的/bin/bash。

Ubuntu 自 6.10 版開始,預設狀態是將 /bin/sh 指向 dash。
dash 是一輕量化的 shell,目前 Ubuntu 及 Debian 都採用 dash 作為預設的 shell

處理方式將dash轉為bash:
– 最暴力的方法當然是直接把/bin/sh的軟鏈接改到bash中,
如:ln -s /bin/bash /bin/sh
– 若要將 Ubuntu 的 /bin/sh 改成 Bash 時,可以執行下面這個命令,然後選擇 NO 就可以了。
sudo dpkg-reconfigure dash
– 或是直接改用bash 執行該script
bash xxxxxx.sh

– dash 與 bash 寫法的差異:
http://www.igigo.net/archives/169

如今Debian和Ubuntu中,/bin/sh默認已經指向dash,這是一個不同於bash的shell,
它主要是為了執行腳本而出現,而不是交互,它速度更快,但功能相比bash要少很多,
語法嚴格遵守POSIX標準,下面簡要列舉下從bash遷移到dash一般需要注意的問題
http://www.igigo.net/archives/169

One thought on “Ubuntu- 執行shell script 為什麼常發生 unexpected operator

發表迴響

Copy Protected by Chetan's WP-Copyprotect.