我经常在网上看到用不同符号连接各种命令的教程。例如:
command1 | command2
command1 & command2
command1 || command2
command1 && command2
Run Code Online (Sandbox Code Playgroud)
其他人似乎将命令连接到文件:
command1 > file1
command1 >> file1
Run Code Online (Sandbox Code Playgroud)
这些是什么?他们叫什么?他们在做什么?还有更多吗?
我正在尝试编写一个符合 POSIX 标准的脚本,因此它可以在任何 *nix 系统(Debian、Fedora、CentOS、AIX、Arch……所有这些)上运行。说到重定向,我对 POSIX 支持什么和不支持什么感到很困惑。
如果我重定向ls -l file missingfile &> out.txt这在bash. 不存在的stderr抱怨行missingfile和 , 的权限输出file都在out.txt. 但是,我相信这只是有效,因为这些 shell 支持的不仅仅是 POSIX 标准运算符。在研究这个问题时,我遇到了相互矛盾的答案。
这stackexchange答案,例如,似乎在暗示&>,>&,>>&和&>>是非标准操作。但是,此答案明确指出some-program > some_file 2>&1符合 POSIX。这是否意味着>&运算符(使用数字表示stderr& stdout)符合 POSIX 而&>用于自动重定向stderr和重定向stdout到文件不符合 POSIX 标准?或者都是&>和>&不符合POSIX / POSIX兼容的(这两人一个是错的)?
我考虑过完全避免使用该&标志并使用,ls -l …