基本上我想了解这些命令之间的区别:
cat <<< yolo | tee f.txt
echo yolo | tee t.txt
还有那些命令:
cat <<< yolo > >(tee f.txt)
echo yolo > >(tee t.txt)
前两个命令的结果完全相同:打印“yolo”,然后终端返回控制权,这正是我所期望的。
[user@localhost ~]$ cat <<< yolo | 三通 f.txt
约洛
[user@localhost ~]$ echo yolo | 三通.txt
约洛
但是使用进程替换,会发生一些奇怪的事情echo
。
[user@localhost ~]$ cat <<< yolo >>(tee f.txt)
约洛
[user@localhost ~]$ echo yolo > >(tee t.txt)
[user@localhost ~]$ yolo
在打印出文本之前,终端会返回控制权。在这种情况下,为什么我能更快地获得控制权?
这一定与如何打开进程以及如何在进程之间传递文件描述符有关,但我有点达到了我的知识极限。
如果我将它通过管道传输到其他任何东西,一切都会恢复正常,例如echo yolo > >(tee t.txt) | cat
.
更奇怪的是 xargs'ing intoecho
效果很好:
[user@localhost ~]$ xargs echo <<< yolo >>(tee t.txt)
约洛
但你可以说这xargs
是这里的主程序,而不是echo
.
如果我使用输入过程替换,cat
我会得到不同的结果:
cat < <(echo yolo) > >(tee t.txt)
有时它给了我这个:
[user@localhost ~]$ cat <<(echo yolo) > >(tee t.txt)
[user@localhost ~]$ yolo
有时是这样的:
[user@localhost ~]$ cat <<(echo yolo) > >(tee t.txt)
约洛
所以我想这可能与系统执行命令的速度有关,这使得它变得不可预测。
这是否意味着输出进程替换(例如tee
在本例中)在后台运行?