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

Posted Chen Jian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu下shell脚本运行异常:bash和dash的区别相关的知识,希望对你有一定的参考价值。

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就可以了

以上是关于Ubuntu下shell脚本运行异常:bash和dash的区别的主要内容,如果未能解决你的问题,请参考以下文章

bash与sh的问题

Ubuntu切换默认shell为bash或者dash

windows怎么提取bash脚本

ubuntu shell脚本出错 dash

/bin/bash:从 Matlab 运行 shell 脚本时没有这样的文件或目录

Linux Shell——bash shell 脚本简介