调试基于Debian的Docker镜像时,进入容器后,在终端中按向上键,终端显示^[[A,向下箭头显示^[[B,向右箭头显示^[[C,向左箭头显示^[[D ,按下删除键时还会显示几个特殊字符。真奇怪。仔细一看,原来终端在进入容器时使用了sh。只需切换到bash即可(可以通过在终端中输入bash命令来切换到bash)。
sh 和bash 都是常见的Unix shell。其实还有一种叫破折号。我们来看看三者之间的联系和区别。
shsh是Shell的缩写。它是Unix/Linux 系统的默认shell,也是最古老的shell 之一。 sh 是标准的POSIX shell,有许多不同的版本和实现,例如Bourne shell 和POSIX shell。
bashbash 是Bourne-Again Shell 的缩写,它是sh 的增强版本,具有更多的功能和选项。 Bash 提供命令自动完成、历史记录、别名、作业控制和其他功能。 bash 是大多数Linux 发行版和macOS 系统上的默认shell。
Dashdash 是Debian Almquist shell 的缩写,是一个源自NetBSD 的轻量级shell,专门为Debian 发行版设计。与bash 相比,dash 具有更精简的代码和更快的启动速度,但提供的功能较少。在Debian 系统上,dash 通常用作/bin/sh(而不是bash),因为dash 更符合POSIX 标准并且启动速度更快。
在很多Linux系统中,/bin/sh指向/bin/bash,即/bin/sh是/bin/bash的软链接
# ls -l /bin/shlrwxrwxrwx 1 root root 4 Oct 15 2017 /bin/sh - bash 在Debian 系统和基于Debian 的发行版中,/bin/sh 指向/bin/dash
# ls -l /bin/shlrwxrwxrwx 1 root root 4 Oct 15 2017 /bin/sh - dash 将sh切换为使用bash而不是dash的方法也很简单,因为/bin/sh是软链接,改一下即可指向/只是bin/bash,执行以下命令
# ln -sf /bin/bash /bin/sh 如果想切换到dash,执行以下命令
# ln -sf /bin/dash /bin/sh 如果你正在制作Docker 镜像,并且希望进入基于该镜像的容器后默认使用bash,可以在相应的Dockerfile 中添加以下行
RUN ln -sf /bin/bash /bin/sh 如果您使用的虚拟机默认使用sh或dash,而您希望以后登录后默认使用bash,可以使用chsh命令更改指定用户的默认shell 类型。命令如下:
chsh -s /bin/bash user 将命令中的用户更改为您自己的用户名。下次登录时,bash 将用作默认shell 终端类型。