bash '

bash '

在 Security StackExchange 上的回答使用有趣的 bash 语法来生成内联文件:

openssl req -new -x509 -nodes -newkey ec:<(openssl ecparam -name secp384r1) -keyout cert.key -out cert.crt -days 3650

这一点特别有趣:

<(openssl ecparam -name secp384r1)

只运行:

echo <(openssl ecparam -name secp384r1)

我回来了/dev/fd/63

所以这似乎用文件的内容创建了一个临时文件描述符。

这个叫什么?

答案1

它被称为流程替代并且是 bash、zsh 和 ksh(可能还有其他,我不知道)的功能。它不是 POSIX,您不应该在可移植代码中使用它,但它非常有用。

这是 bash 手册的相关部分:

3.5.6 流程替代

支持命名管道 (FIFO) 或 /dev/fd 命名打开文件方法的系统支持进程替换。它采取以下形式

  <(list) 

或者

  >(list) 

进程列表的输入或输出连接到 FIFO 或 /dev/fd 中的某个文件。该文件的名称作为扩展结果作为参数传递给当前命令。如果使用 >(list) 形式,写入文件将为列表提供输入。如果使用 <(list) 形式,则应读取作为参数传递的文件以获得 list 的输出。请注意,< 或 > 与左括号之间不能出现空格,否则该构造将被解释为重定向。

如果可用,进程替换与参数和变量扩展、命令替换和算术扩展同时执行。

相关内容