Linux中什么是POSIX兼容模式?

悉达思(Siddharth)Thevaril

这本书说:

在POSIX兼容模式下,bash将模拟sh

这是什么意思?用简单的外行术语进行仿真意味着什么?

芒登

这不是Linux,而是bash。Bash只是众多shell中的一种。Bash是“ Bourne Again Shell”,并作为原始Bourne Shell的替代产品发布sh

POSIX是一组定义POSIX兼容系统应如何工作的标准。POSIX shell标准可以在这里找到Bash具有许多不存在的功能,sh并且实际上不是POSIX兼容的外壳。

--posix就是提供选项的原因man bash(重点我的)中所述:

如果使用名称sh调用bash,则它会尝试尽可能接近于sh的历史版本的启动行为,同时也要符合POSIX标准。当作为交互式登录外壳程序或带有--login选项的非交互式外壳程序调用时,它首先尝试按该顺序从/ etc / profile和〜/ .profile中读取和执行命令。--noprofile选项可用于禁止此行为。当bash作为名称为sh的交互式shell调用时,bash查找变量ENV,如果定义了变量,则扩展其值,并将扩展后的值用作要读取和执行的文件的名称。由于以sh调用的shell不会尝试从任何其他启动文件读取和执行命令,因此--rcfile选项无效。使用名称sh调用的非交互式外壳程序不会尝试读取任何其他启动文件。当作为sh调用时,bash在读取启动文件后进入posix模式。

当bash在posix模式下启动时(与--posix命令行选项一样),它遵循POSIX标准来启动文件。在这种模式下,交互式外壳程序将扩展ENV变量,并从名称为扩展值的文件中读取并执行命令。没有其他启动文件被读取。

这意味着,如果运行shbash --posix来启动交互式外壳~/.bahsrc程序,则将忽略您的文件,而是$ENV读取另存为(如果有)的文件为了说明,我已经添加echo "read .bashrc"到我的~/.bashrc

$ bash
read .bashrc  ## message was printed, ~/.bashrc was read
$ sh
sh-4.3$       ## no message printed, ~/.bashrc was not read

如果我现在设置$ENV

$ export ENV="~/.bashrc"
$ sh
read .bashrc

重要提示:Ubuntu已选择与进行/bin/sh同步链接/bin/dashDash是另一种外壳,实际上是与POSIX兼容的外壳。这意味着为了观察我上面描述的行为,您需要使用不同的sh1在Ubuntu上,您需要创建一个名为的文件sh该文件是的符号链接/bin/bash

$ ln -s /bin/bash ~/sh

现在sh,您的主目录中有一个名为的文件用它来证明我上面解释的差异:

$ ls -l ~/sh
lrwxrwxrwx 1 terdon terdon 9 May  2 14:03 /home/terdon/sh -> /bin/bash
$ ~/sh
read .bashrc

1 实际上,该行为看起来好像是相同的,~/.bashrc将被忽略,但这仅仅是因为事实dash并非如此,bash并且也没有人阅读特定于bash的内容~/.bashrc但是,dash也忽略它,$ENV因此您需要使用链接/bin/bash来查看。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

要使Windows成为现成的兼容POSIX的操作系统,需要采取什么措施?

计划9中的“临时”文件模式是什么,在Linux中可用吗?

Android POSIX兼容吗?

IE-在Iframe中阻止兼容模式

iPhone X:是什么触发兼容模式与全屏模式?

使用向后兼容的模式在Spark中读取旧数据

什么是if((... ...))的POSIX兼容替代品?

在Webview UWP Win 8.1中兼容启用模式

“ / path / file / ..”如何与POSIX兼容?

为什么默认情况下,即使不兼容POSIX,也有几个Linux发行版附带了mawk?

为什么与Android的兼容性不是Linux发行版中的常见功能?

Vim中的兼容模式是什么?

Linux中的嵌套POSIX组

posix / chmod中的大写X是什么?

Windows中的“兼容模式”如何工作?

IE11中的兼容模式

为什么Intranet站点的兼容模式

IE 11中的兼容模式

图标字体导致IE8中的兼容模式

如何找出兼容POSIX的Linux系统中可用的外壳命令,而哪些不可用?

为什么处理器检查说“与长模式兼容”,但VMplayer说“不兼容”?

兼容模式在Windows 10中不起作用

为什么zsh和ksh93选择在模式匹配中不兼容?

Linux / Unix中单用户模式的含义是什么,它与Windows中的安全模式有何不同?

拥有POSIX兼容操作系统意味着什么?

Windows 7中的Windows 7兼容模式

在主流POSIX兼容的shell中,双引号内转义特殊字符的行为是否与POSIX背道而驰?

为什么Text.Regex.Posix中的正则表达式模式的长度有限制?

破折号中的显式posix模式