为什么 login-shell 是 bash,但 /bin/sh 是 dash 的链接?

为什么 login-shell 是 bash,但 /bin/sh 是 dash 的链接?

一般情况下,环境变量的值SHELL 是/bin/bash,也就是说正常的shell环境就是Bash,但是/bin/sh却是Dash的链接,那Dash的作用是什么呢?

还有一个问题:虽然我们的shell环境是bash,但是为什么有时候会因为dash而出错呢?

答案1

关于的一般评论sh

shellsh是指向 的符号链接dash,这是一个占用空间很小的 shell。这意味着它可以快速工作并且不会占用太多内存。但是内置命令很少、很简单,并且与更高级的 shell(例如bash)相比语法也不同。

这两种 shell (shbash)都是有用的,但是用途不同。

如何运行 shellscriptbash

如果您运行带有命令的文本文件(shellscript),则可以强制它由某个 shell 运行。否则,它可能会默认为 shell,但无法按预期工作,例如因为某些内置命令不存在或内置命令的语法不同。

因此,为了使 shellscript 运行bash,你可以强制它

  • 通过调用它bash

    bash shellscriptname
    
  • 在文件顶部写一行,第一行内容为

    #!/bin/bash
    

    这称为“shebang”。shebang 也可以指向其他 shell,例如sh或 ,csh也可以指向其他程序,例如pythonbc。如果您使 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

相关内容