<($cmd) 可以模拟类似协程的效果,如下:
1 2 3 4 5 6 7 8 |
# cat <(while :; do echo 1; sleep 1; done ) 1 1 1 1 1 1 ^C |
当然,效果上虽然和走管道类似,但是如果程序不支持读标准输入的话,这也不失为一种不错的替代; 当然,这个也可以用于标准输入的重定向:
1 |
# cat < <(while :; do echo 1; sleep 1; done ) |
这两种写法只差一个 < ,后者是shell直接帮做了标准输入的重定向,前者没有做标准输入的重定向,只是向打开普通文件一样的方式打开了bash帮忙生成的一个临时文件。
这种语法 叫做Process Substitution