灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2501回复:0

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

楼主#
更多 发布于:2013-08-26 13:56
ubuntu下shell脚本运行异常:bash和dash的区别
 
 
 
我用bash到语法写了一个shell脚本(准确的说是把书上的脚本敲进电脑),在ubuntu下,用sh test.sh来运行,但是出现了意料之外到结果,比如echo -e "nTestn"到执行就不同,直接用sh test.sh运行,会打印出-e(作为字符串);而直接在终端中输入echo -e "nTestn"是不会输出"-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就可以了。

喜欢0 评分0
游客

返回顶部