You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行openssl命令用<()进程替换遇unexpected token `('语法错误

问题原因与解决方案

核心报错诱因

你使用的<(printf "subjectAltName=DNS:${DNS}")属于进程替换语法,是Bash、Zsh等高级Shell的专属扩展特性,不属于POSIX标准的sh语法范畴。
触发该错误的常见场景有两类:

  • 脚本开头的shebang声明为#!/bin/sh,而非#!/bin/bash
  • 执行脚本时显式调用sh解析器,比如运行了sh certificates.sh命令

修复方案

方案1:使用Bash解析器运行脚本

最简单的修复方式是指定用Bash解析脚本:

  1. 将脚本开头的shebang行修改为#!/bin/bash
  2. 执行脚本时使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:48:03