Linux 上的 `ash` 和 `sh` shell 有什么区别?

que*_*o42 9 shell ash

我对 Linux 上的很多工具都是新手。快速搜索没有帮助,我只得到了更多关于bash或 的sh信息,并且搜索它在某种程度上倾向于bash在搜索结果中。那里有很多不同的 shell 类型,我什至见过zsh,因此我猜它们都是来自 的叉子sh

已经有一个问题使用bash和sh运行脚本有什么区别?这是类似的:

  • 但我找不到 shell 中的“a”代表什么
  • 这个问题也不只是关于运行脚本,而是关于 shell 本身 - 因为我可以选择使用ashsh用于手头的 docker 容器。

我记得ash会更舒服,但仍然很苗条,我忘了为什么。

ash和 和之间的主要区别是什么sh?尺寸、处理方式……?

基本镜像是python:3-alpine,即使是带有最新标签 (2022-07) 的镜像也同时具有/bin/ash/bin/sh。这两者出现在高山图像中应该是有原因的,而该图像是所有图像中最紧凑的。我用 来称呼它docker-compose -f docker-compose-develop.yaml run --rm MY_CONTAINER ash

Ste*_*itt 10

历史上,ash是阿尔姆奎斯特壳。“sh 兼容”是什么意思?给出了它在 -style shell 的整体上下文中的历史sh,以及在哪里可以找到 Almquist Shell 的源代码?解释在哪里可以找到它。

\n

如今,在提供名为 的 shell 的 Linux 系统上ash, it\xe2\x80\x99 或dashBusybox ash,两者都源自 Almquist Shell,但有显着差异。

\n

在当前的Linux系统上,包括在容器中,存在三种常见场景:

\n
    \n
  • sh是 Bash (sh模式) \xe2\x80\x94 这总是比ash
  • \n
  • shdash(Debian 衍生品) \xe2\x80\x94 在此类系统中,安装ash将导致从ash到 的符号链接dash,因此ashsh具有相同的大小
  • \n
  • sh是 Busybox \xe2\x80\x94 具体取决于构建 Busybox 时使用的选项,但默认情况下现在 Busyboxshash,因此ashsh具有相同的大小
  • \n
\n

(在 Android(也是 Linux)上,shmksh,并且同样的注释适用于 Bash。)

\n

Shell 可以根据调用方式来改变其行为,因此将 shell 启动为ashsh可能会导致不同的体验。然而,据我所知,默认sh情况下Busybox 的情况并非如此ash(如容器映像中的情况)。

\n