一般情况下,环境变量的值SHELL
是/bin/bash,也就是说正常的shell环境就是Bash,但是/bin/sh却是Dash的链接,那Dash的作用是什么呢?
还有一个问题:虽然我们的shell环境是bash,但是为什么有时候会因为dash而出错呢?
答案1
关于的一般评论sh
shellsh
是指向 的符号链接dash
,这是一个占用空间很小的 shell。这意味着它可以快速工作并且不会占用太多内存。但是内置命令很少、很简单,并且与更高级的 shell(例如bash
)相比语法也不同。
这两种 shell (sh
和bash
)都是有用的,但是用途不同。
如何运行 shellscriptbash
如果您运行带有命令的文本文件(shellscript),则可以强制它由某个 shell 运行。否则,它可能会默认为 shell,但无法按预期工作,例如因为某些内置命令不存在或内置命令的语法不同。
因此,为了使 shellscript 运行bash
,你可以强制它
通过调用它
bash
bash shellscriptname
在文件顶部写一行,第一行内容为
#!/bin/bash
这称为“shebang”。shebang 也可以指向其他 shell,例如
sh
或 ,csh
也可以指向其他程序,例如python
或bc
。如果您使 shellscript 文件可执行chmod +x shellscriptname
你可以使用以下命令运行它
./shellscriptname # when in the current directory path-to-the-script-file/shellscriptname # when somewhere else shellscriptname # when in a directory in PATH
它将由 shell 或 shebang 中的其他程序执行。
答案2
它们的主要观点是,它bash
是为交互使用而设计的,dash
用于系统脚本。
bash
带有大量功能,其中包括行编辑。您可以使用特定的快捷键来删除单词、跳转到行首等。这对于以交互方式编写命令非常方便。但是,这会以性能和启动时间为代价。
dash
另一方面,用于编写系统脚本快速且便携,从而有助于缩短启动时间,在 Ubuntu 上无需行编辑即可编译,甚至没有vi
编辑模式。因此,它的开销较小。bash
能够运行完全相同的脚本/bin/dash
(当然,如果它们是用可移植语法编写的),但dash
执行这些相同操作的速度更快。
当然,请注意,用户可以自由更改登录 shell通过命令,如果这不是您喜欢的,chsh
您不必坚持。bash