红联Linux门户
Linux帮助

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

发布时间:2010-04-03 20:32:46来源:红联作者:gaplee
ubuntu下shell脚本运行异常:bash和dash的区别Linux技术 2010-02-18 19:10:54 阅读19 评论0 字号:大中小
我用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就可以了。

http://renyongjie668.blog.163.com/blog/static/1600531201011871054648/
文章评论

共有 7 条评论

  1. 泡芙 于 2011-05-14 17:23:27发表:

    刚用Ubuntu,请问我的shell脚本中cd这个命令没有用,进不了指定的目录,这是什么原因呢?

  2. cdaxcy 于 2010-04-05 09:21:53发表:

    谢谢楼主分享!

  3. Junyi 于 2010-04-04 06:29:13发表:

    顶一下

  4. bobo504 于 2010-04-03 23:13:16发表:

    不错的经验,感谢分享,顶一下先

  5. Alsdwdz 于 2010-04-03 20:49:58发表:

    受教

  6. Alsdwdz 于 2010-04-03 20:49:55发表:

    受教

  7. gaplee 于 2010-04-03 20:34:48发表:

    今天为了declare命令忙了一天了,Ubuntu下sh连接到dash而不是bash,有些命令用sh就无法解析,算是有收获了,把经验分享,大家清明节快乐