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

xj3cbfub  于 2023-02-09  发布在  Shell
关注(0)|答案(2)|浏览(161)

我听说过fish,它是一个友好的开箱即用的shell,但它不支持POSIX标准。另一方面,我读到过POSIX标准(我也在我的Fedora上测试过它,它是一个令人惊讶的开箱即用的shell,现在我想把我的默认shell改为fish)。
但我提出这个问题的原因是:我误解了fish和POSIX标准之间的关系,你说fish不完全支持POSIX是什么意思?怎么做?(我应该把我的bash改成fish吗?)

  • 请简单解释,因为我是个新手,谢谢 *
axzmvihb

axzmvihb1#

fish不是也从未尝试过与POSIX sh兼容。
这实际上只是意味着它是一种独立的语言(如Java、Python或Ruby),而不是sh的实现或扩展(如Bash、Dash和Ksh)。
显然,就像不能将Java代码片段复制粘贴到Python程序中一样,也不能将sh代码复制粘贴到fish中。
在实践中,这意味着当你搜索“如何在提示符中显示当前git分支”时,你需要确保找到fish的答案,因为sh的答案是不起作用的.同样,当书籍或说明书给予运行命令时,你可能偶尔需要手动重写其中的一些命令(或者打开bash shell并将其粘贴到那里).
这是否重要完全取决于你,所以一定要给予一试。

1sbrub3j

1sbrub3j2#

实际上,fish并不兼容POSIX shdefinition,但是csh(可能还有zsh)也不兼容,您仍然可以使用fish作为交互式shell。
例如echo $$显示了POSIX sh中shell的pid,但是fish中没有。
(and这就是为什么我没有切换到fish,而是继续使用zsh作为我的日常交互式登录shell)
您可以将交互式登录shell(使用chsh)更改为fish
但是如果您编写shell scripts,那么为POSIX sh规范编写它们会使这些脚本更易于移植。(您将使用shebang#!/bin/sh来启动它们,Linux execve(2)可以理解它)。你不关心你的shell脚本的portability,你可以让它们从#!/usr/bin/fish开始变成fish脚本,这样它们就不能在没有fish的系统上工作了。
此外,system(3) C标准库函数使用/bin/sh -c
在FOSDEM2018上,我非常喜欢 POSIX [s]hell 上的Yann Regis-Gianas' talk

相关问题