我是一个新的 Linux 用户,我正在做一些实验并试图理解流程替代。我相信我已经对此有了基本的了解。但这里有一个案例,我不知道为什么。我在 Ubuntu 20.04 上使用 Bash。
echo hi
只是将hi
带有换行符的字符串发送到标准输出。
root@u2004:~# echo hi | od -a
0000000 h i nl
0000003
root@u2004:~#
cat
可以从管道中读取其标准输入,并将其读取的内容发送到管道。
root@u2004:~# echo hi | cat
hi
root@u2004:~# echo hi | cat | od -a
0000000 h i nl
0000003
root@u2004:~#
据我了解,该命令echo hi > >(cat)
还将cat
从其标准输入中读取(并打印到控制台)。但是当我运行它时,我得到了这个:
root@u2004:~# echo hi > >(cat)
root@u2004:~# hi
<the cursor blinks at this location>
我必须按下该Enter键才能完成命令。
root@u2004:~# echo hi >>(猫) root@u2004:~#嗨 Enter 根@u2004:~#
为什么会有这种行为?我对命令的理解echo hi > >(cat)
正确吗?
答案1
没有任何问题,命令成功完成。
你看到了什么:
root@u2004:~# echo hi > >(cat)
root@u2004:~# hi
<the cursor blinks at this location>
您输入了命令,点击Enter。您的 shell 打印出提示符,然后cat
异步启动的进程完成并输出hi\n
.
空行上闪烁的光标属于上一行的提示,但echo
命令中的换行符扰乱了显示。
随后的“按 Enter”只会给您一个新的提示。如果输入命令并按 Enter 键,该命令将运行。