通过另一个命令的结果进行bash重定向



此命令运行良好。

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运行它。

相关内容

  • 没有找到相关文章

最新更新