执行openssl命令用<()进程替换遇unexpected token `('语法错误
问题原因与解决方案
核心报错诱因
你使用的<(printf "subjectAltName=DNS:${DNS}")属于进程替换语法,是Bash、Zsh等高级Shell的专属扩展特性,不属于POSIX标准的sh语法范畴。
触发该错误的常见场景有两类:
- 脚本开头的shebang声明为
#!/bin/sh,而非#!/bin/bash - 执行脚本时显式调用sh解析器,比如运行了
sh certificates.sh命令
修复方案
方案1:使用Bash解析器运行脚本
最简单的修复方式是指定用Bash解析脚本:
- 将脚本开头的shebang行修改为
#!/bin/bash - 执行脚本时使用
bash certificates.sh命令,而非sh certificates.sh
方案2:兼容POSIX sh的改写方案
如果需要脚本兼容标准sh语法,可以放弃进程替换,改用临时文件传递配置:
# 写入SAN配置到临时文件 printf "subjectAltName=DNS:${DNS}" > san_config.tmp # 执行openssl生成证书 openssl x509 -req -days 365 -sha256 -in cert.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt -extfile san_config.tmp # 清理临时文件 rm -f san_config.tmp
内容的提问来源于stack exchange,提问作者Louis Hulot
相关产品推荐
相关产品推荐

