是否可以更换破折号之类的外壳?

0 shell

我正在致力于基于 Debian 构建我自己的 Linux 发行版。我很好奇是否可以完全删除破折号并将其替换为像鱼或精灵这样的贝壳。我知道您需要进行一些更改,但我很好奇是否可能以及您需要采取的流程。

Sté*_*las 6

没有什么可以阻止您安装额外的 shell,但是如果我们谈论的是通用的类 Unix 系统,例如 Debian,您需要确保您的系统有一个/bin/sh支持 POSIXsh语法的 shell\xc2 \xb9。例如,system("some sh code")许多编程语言都使用该 shell 来解释没有 shebang 的脚本(当然还有所有带有#! /bin/sh -shebang 的脚本)。

\n

不一定是dash,可能是bashksh88\xc2\xb2、mkshboshposh,甚至zsh\xc2\xb3 ,其sh模式可能足够好。fish, elvish, csh, tcsh, rc,es是 shell 的示例,其语法与 POSIX 的语法完全不同sh,因此不能在sh那里使用。

\n

其中,dash可能是最好的选择,因为它比大多数其他选择更精简、更快、更安全,您需要它做的就是解释 POSIX sh 代码。它也是 Debian 及其大多数衍生产品使用的 shell,因此作为解释sh器拥有最大的用户群之一,这意味着如果有问题,通常会很快被发现并修复。

\n

至少,在类似 Debian 的系统中情况要好一些。在其他一些基于 GNU 的系统上,/bin/sh必须是bash( 的 GNU 实现sh),因为某些系统脚本使用该 shell 的某些非标准扩展。Debian 已经投入了一些巨大的努力来消除所有这些所谓的bashism,因此bash可以用更精简/更快的 shell 来替换,例如dash它的/bin/sh.

\n

无论如何,只要直接在内核中实现系统的功能,就可以让系统在没有任何 shell、或者没有任何命令甚至文件系统的情况下完美工作,因此,严格来说,只要您准备好从头开始构建自己的系统,此类问题的答案总是肯定的。

\n
\n

\xc2\xb9 严格来说,对于 Debian,它必须是符合 Debian 政策(POSIX 超集)的 shell。在必须支持的其他内容中,sh有一个local关键字/内置函数可以获取函数中变量的局部作用域。

\n

\xc2\xb2 这是 POSIX 规范所基于的 shell(其子集)sh,但是它从未作为 FLOSS 发布,因此您将很难找到它的 GNU/Linux 版本。

\n

\xc2\xb3 虽然yash是另一个符合 POSIX 标准的 shell,但我会避免使用它,因为它通常无法处理非文本数据。busybox ash 也主要兼容 POSIX,但请注意,根据 busybox 的构建方式,它可能会调用 busybox 小程序而不是相应的系统命令,其中一些不兼容 POSIX,因此会破坏需要完整 POSIX 功能集的脚本。ksh93 主要兼容 POSIX,但不支持localDebian 策略的要求。另请参阅支持用于定义局部变量的“local”关键字的 shell 列表

\n