GNU/Linux 操作系統中的 /bin/sh 是 bash(Bourne-Again Shell)的符號鏈接,但鑒於 bash 過於復雜,有人把 ash 從 NetBSD 移植到 Linux 並更名為 dash(Debian Almquist Shell),並建議將 /bin/sh 指向它,以獲得更快的腳本執行速度。Ubuntu 號稱自從他們在 6.10 版裡這樣做了以後,系統啟動速度有了明顯的提升。Debian 計劃在下一個發行版(代號 lenny)中也將 dash 作為默認的 /bin/sh。
按照慣例(以及很多寫腳本的規范),標記為“#!/bin/sh”的腳本不應使用任何 POSIX 沒有規定的特性(使用 bash 特性的腳本要使用“#!/bin/bash”),所以在理論上,這樣應該沒有任何副作用。但是現實中,Linux 下的很多(不規范的)腳本有所謂 bashism,卻在文件頭標記為“#!/bin/sh”。有人把腳本失敗歸咎於 Ubuntu 而不是自己的腳本,這是不公平的。
剛才在 Debian (testing)下嘗試用 dash 作為 /bin/sh,並重啟了一下系統,好像快了那麼一點點(心理作用?)不過我想它節約的那點時間也許比掛載我的兩個 reiserfs 分區用的時間還要少……
遇到的問題:自己的兩個腳本掛了,把“#!/bin/sh”改為“#!/bin/bash”;自己的一個帶 bashism 的 Makefile 掛了,加上“SHELL=/bin/bash”。
在 Debian 下,先安裝軟件包 dash,然後 dpkg-reconfigure dash,回答 Yes 即可。
在 Ubuntu 下這已經是默認,如果因為某些原因需要改回到 bash,也是用 dpkg-reconfigure dash。