bash 2>>(命令)>>(命令)没有得到它

bash 2>>(命令)>>(命令)没有得到它

一直在关注这个(https://stackoverflow.com/a/16283739/15603477)很好的答案。下面的部分我不明白。

$ ls -ld /tmp /tnt 2> >(sed 's/^/E: /') > >(sed 's/^/O: /')
O: drwxrwxrwt 17 root root 28672 Nov  5 23:00 /tmp
E: ls: cannot access /tnt: No such file or directory

又此也。

$ ((ls -ld /tmp /tnt |sed 's/^/O: /' >&9 ) 2>&1 |sed 's/^/E: /') 9>&1| cat -n
     1  O: drwxrwxrwt 118 root root 196608 Jan  7 12:29 /tmp
     2  E: ls: cannot access /tnt: No such file or directory

https://www.gnu.org/software/sed/manual/sed.html#Introduction E:O:部分仍然没有得到它。


以下是我的解读

$ ls -ld /tmp /tnt 2> >(sed 's/^/E: /') > >(sed 's/^/O: /')

2 指的是stderr,命令ls -ld /tmp /tnt的错误将在 中进行评估(sed 's/^/E: /')^指的是行的开头,开头将被替换为乙:
>(sed 's/^/O: /')== 1>(sed 's/^/O: /')
1 指的是 stdout,正常输出将被评估 在(sed 's/^/O: /')开头将被替换为哦:

答案1

>(...)叫做流程替代。它让“外部”程序写入“内部”程序,就好像它是一个文件一样。

另请参阅页面bash 中的重定向器

E:O:是注释的作者用来指示 Error( stderr) 和 Standard Output( stdout) 输出的命令,其中命令通过管道传输sed

sed 's/^/E: /'查找行 ( ^) 的开头,并将其替换(添加)为E:O:,如命令的第二部分所示。

相关内容