一直在关注这个(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:
,如命令的第二部分所示。