为什么和如何鱼不支持POSIX?



我听说过鱼是一个友好且盒子外壳,但也不支持POSIX标准。另一方面,我阅读了有关POSIX标准的信息(也我在Fedora上测试了它,现在我想将默认的外壳更改为鱼(。

(。

但是我开放这个问题的问题是:我误解了鱼与Posix标准之间的关系,您对鱼的意思是什么不支持Posix?&如何?(我应该将bash更改为钓鱼吗?(。

请简单说明'因为我有点新手,谢谢。

鱼不是,也不试图与Posix sh。

兼容

这确实意味着它是一种单独的语言(例如Java,Python或Ruby(,而不是SH的实现或扩展(例如Bash,dash和ksh(。

显然,就像您无法将paste java摘要复制到python程序中一样,您不能将paste sh代码复制到 fish中。

实际上,这意味着当您搜索类似"我如何在我的提示中显示当前的git分支"之类的事物时,您需要确保找到fish答案,因为sh的答案是不起作用的。同样,当书籍或说明给出运行命令时,您有时可能需要手动重写其中的一些(或打开bash壳并在那里粘贴它们(。

这是否完全取决于您,所以一定要尝试一下。

实际上, fish不符合POSIX sh定义。但是csh也不是(可能是zsh(。您仍然可以将fish用作交互式外壳。

例如, echo $$显示了posix sh中壳的pid。但是使用fish,它不会。

(这就是为什么我不切换到fish并继续使用zsh作为我的日常互动登录外壳(

您可以将交互式登录外壳(使用chsh(更改为fish

但是,如果您编写Shell脚本,则为POSIX sh规范编写它们,使这些脚本更加便携。(您将使用Shebang #!/bin/sh来启动它们,Linux Execve(2(可以理解它。在某些情况下,您不在乎Shell脚本的可移植性,并且可以使它们从#!/usr/bin/fish开始,为fish脚本。然后,如果没有fish

他们将无法在系统上工作

另外,系统(3(C标准库功能使用/bin/sh -c

我非常喜欢Yann Regis-Gianas在Fosdem2018上的 posix [s]地狱的演讲。

最新更新