歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Ubuntu下shell腳本運行異常:bash和dash的區別

Ubuntu下shell腳本運行異常:bash和dash的區別

日期:2017/2/28 14:43:08   编辑:SHELL編程

Ubuntu下我用bash到語法寫了一個shell腳本(准確的說是把書上的腳本敲進電腦),在ubuntu下,用sh test.sh來運行,但是出現了意料之外到結果,比如echo -e "\nTest\n"到執行就不同,直接用sh test.sh運行,會打印出-e(作為字符串);而直接在終端中輸入echo -e "\nTest\n"是不會輸出"-e"的。

我就在想是什麼原因,後來終於發現是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。

bash - GNU Bourne-Again SHell

dash - Debian Almquist Shell

可以分別man bash / man dash看一下。

那麼怎麼把sh改為指向bash呢?

最暴力的方法當然是直接把/bin/sh的軟鏈接改到bash中,

如:ln -s /bin/bash /bin/sh

但是,有優雅一些的方法,

sudo dpkg-reconfigure dash

出現菜單問你是否要dash的時候,選no就可以了。

再次檢查一下, ls /bin/sh -al 發現軟鏈接指向/bin/bash就可以了。

Copyright © Linux教程網 All Rights Reserved