2

这个命令效果很好。

bash < <(echo 'ls')

这段代码是如何工作的?
我无法理解这个脚本的内部过程。

4

3 回答 3

5

<(anycmd)使用anycmd的输出创建一个临时文件

anycmd <正在运行anycmd ,其标准输入来自<右侧的文件

所以你的命令相当于

tmpf=$(mktemp)
echo 'ls' > $tmpf
bash < $tmpf
unlink $tmpf
于 2012-11-07T08:28:08.280 回答
3

<(echo 'stuff')称为进程替换。它使用命名管道(或 FIFO)来管道命令的输出(尽管确切的机制取决于系统)。您可以在可以使用文件名的任何地方使用此构造*,因此:

program < <(command)

我们从command获取输出并将其传递给program的标准输入流。

*anywhere:一些程序使用一种称为内存映射的技术(请参阅 参考资料man 2 mmap),该技术不能用于命名管道。一个写得好的程序会事先检查文件类型,不幸的是不是所有的程序都写得很好......

于 2012-11-07T08:56:18.387 回答
0

echo ls产生ls. <( ... )创建一个包含它的文件。<将此文件发送到 的标准输入bash,使其bash运行。

于 2012-11-07T08:25:11.467 回答