我听说过鱼是一个友好且盒子外壳,但也不支持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]地狱的演讲。