这在 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 的输出。请注意,< 或 > 与左括号之间不能出现空格,否则该构造将被解释为重定向。
如果可用,进程替换与参数和变量扩展、命令替换和算术扩展同时执行。