这个命令效果很好。
bash < <(echo 'ls')
这段代码是如何工作的?
我无法理解这个脚本的内部过程。
<(anycmd)使用anycmd的输出创建一个临时文件
anycmd <正在运行anycmd ,其标准输入来自<右侧的文件
所以你的命令相当于
tmpf=$(mktemp)
echo 'ls' > $tmpf
bash < $tmpf
unlink $tmpf
<(echo 'stuff')
称为进程替换。它使用命名管道(或 FIFO)来管道命令的输出(尽管确切的机制取决于系统)。您可以在可以使用文件名的任何地方使用此构造*,因此:
program < <(command)
我们从command获取输出并将其传递给program的标准输入流。
*anywhere:一些程序使用一种称为内存映射的技术(请参阅 参考资料man 2 mmap
),该技术不能用于命名管道。一个写得好的程序会事先检查文件类型,不幸的是不是所有的程序都写得很好......
echo ls
产生ls
. <( ... )
创建一个包含它的文件。<
将此文件发送到 的标准输入bash
,使其bash
运行。