使用 '-<

使用 '-<

我需要提取 shasum。这可行,但有人能解释一下原因吗?

sed 's/^.*= //' -< <(openssl dgst -sha256 filename)

我熟悉该$( )构造,但找不到 的文档<( ),再加上-<,我认为这是重定向到sedSTDIN。

我知道有更简单的方法,但是这种构造让我难以理解。

答案1

<(openssl dgst -sha256 filename)

构造是一个流程替代它在后台创建一个文件(或 FIFO)并将其名称传回命令序列。

< 

是常规文件重定向,将后台文件的内容重定向stdin

-

是一个可识别的占位符,sed表示其输入来自stdin

由于sed完全能够从文件中读取,因此-<在这种情况下似乎是不必要的;

sed 's/^.*= //' <(openssl dgst -sha256 filename)

应该同样有效。

答案2

Bash<( COMMAND )结构被称为流程替代

它评估COMMAND内部情况,并将其输出重定向到 FIFO,这是一个命名管道,内部/dev/fd分配有虚拟文件描述符。它的作用类似于包含评估命令输出的临时文件。


Bash<结构被称为输入重定向

它获取右侧的文件描述符并将其内容重定向到左侧命令的 STDIN(标准输入)。


不是-一个 Bash 构造,而是一个论据sed指定其输入文件。特殊值-意味着从 STDIN 读取(这也是sed的默认值,因此可以省略)。


sed 's/^.*= //' - < <(openssl dgst -sha256 filename)

此行首先运行openssl dgst -sha256 filename并将其输出缓存在 FIFO 中。表示此命名管道的文件描述符被视为输入文件,该文件将重定向到 的 STDIN sed 's/^.*= //' -。此sed命令从 STDIN 读取并删除“=”符号后跟空格之前的每个字符。

相关内容