ubuntu下shell脚本运行异常:bash和dash的区别

转自:http://hi.baidu.com/che_hong_wei/item/8007be8b92a606c599255f7d

我用的是ubuntu,这两天写脚本,一写declare就报错“declare: not found”,还以为自己用的不对。今天上网查了一下,明白了:ubuntu默认sh是dash,而我的脚本用的是bash,b、d一个字母之差,导致了这一切。

解决方法,如果你想使用dash,使用sudo dpkg-reconfigure dash,出现菜单问你是否要dash的时候,选no就可以了。-----这个可以
要是你要使用bash,使用sudo dpkg-reconfigure bash。我就是这么做得。-----这个我尝试了还是不行额


转自:http://www.51testing.com/?uid-225738-action-viewspace-itemid-208702

ubuntu下shell脚本运行异常:bash和dash的区别

我用bash到语法写了一个shell脚本(准确的说是把书上的脚本敲进电脑),在ubuntu下,用shtest.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       ------------注意dpkg-reconfigure中间没有空格哦!!
出现菜单问你是否要dash的时候,选no就可以了。

再次检查一下, ls /bin/sh -al 发现软链接指向/bin/bash就可以了。

------------------------------------------------------------------------------------

加上我的截图:对比下那个sh -> dash 那行



---------------------------------------------------------------------

bash下输出:

echo "hi \n"          输出结果为    hi \n      

echo -e "hi\n"       输出结果为     hi


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值