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