shell 中的实用程序依赖

shell 中的实用程序依赖

我知道任何 *nix 操作系统的“层”架构都是内核外壳实用程序(“从内到外”)。

如果我们安装了 Debian-Server 并获得了一些 CLI 实用程序,那么
所有这些实用程序是否应该与所有 shell(Bash、Dash、Korn 等)一样工作?
换句话说,Linux 实用程序(我假设它们与内核相关)是否也与 shell 相关?

答案1

我知道任何 *nix 操作系统的“层”架构都是内核外壳实用程序(“从内到外”)。

事实并非如此。一切都在内核之上运行,非 shell 脚本的“实用程序”不需要 shell,因此不依赖于特定的 shell。

有些程序确实需要其他程序,例如 Wayland 客户端需要 Wayland 合成器。但没有涉及贝壳的一般分层。

答案2

我假设“shell”指的是用作 Unix 系统登录 shell 的特定 shell。

您计算机上的软件很可能依赖于特定的 shell,但它不会依赖于您用作个人登录 shell 的 shell(即,它不会仅依赖于登录 shell)因为这是您的登录 shell)。

碰巧作为脚本(或部分作为脚本)实现的实用程序可能会使用例如或其他一些 shell 来执行某些操作,但如果您的登录 shell 是、或或一些更深奥的 shell,则/bin/sh它的工作方式完全相同,就像 Python 脚本对每个人来说都是一样的,无论他们使用什么 shell。bashzshyash

请记住,Unix 是一个多用户操作系统,因此,无论用户使用哪种命令行 shell,命令行实用程序以及图形应用程序都会以相同的方式工作(“管道”,即启动实用程序的语法) ,可能略有不同,但在任何用户的 shell 中都是一致的)。

举个实用程序的例子用途shell 脚本,请参阅firefox某些系统上的可执行文件(这可能是启动实际的 firefox二进制)。某些类型的编译器(例如 OpenMPI)是作为实际编译器周围的 shell 脚本包装器来实现的。同样,无论用户使用什么 shell 作为登录 shell,执行此操作的程序都会以相同的方式工作。

另一方面,为例如编写的 shell 脚本zsh 将不会当由另一个 shell 执行时可靠地工作。这应该不足为奇,因为用另一个脚本替换任何脚本的解释器很可能会破坏该脚本(例如,使用 Ruby 解释器运行 Perl 脚本可能会失败)。

相关内容