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

含引号及特殊字符的文件管道传入OpenSSL的Bash脚本问题求助

解决Bash脚本中echo处理特殊字符失效的问题

嘿,这个问题我之前也碰到过!根源在于echo命令会自动解析一些特殊字符(比如转义符、引号),导致你的原始内容被篡改后才传给openssl。咱们只需要做两个小修改就能彻底解决:

关键修改点

  1. 给read添加-r选项:默认情况下read会把行内的反斜杠当作转义符处理,导致原始内容丢失。-r选项会禁用这种行为,完整保留输入行的所有字符。
  2. 用printf替代echo输出内容:echo会解析转义序列(比如\n、\t)并对引号做特殊处理,而printf "%s\n" "$line"会严格按照原始内容输出,不会做任何额外解析。

修改后的完整脚本

#!/bin/bash
printf "What is your encryption password?\n"
read -s password </dev/tty
while read -r line; do
    printf "%s\n" "$line" | openssl enc -aes-256-cbc -base64 -pass pass:"$password" -e;
done > >(openssl s_client -quiet -connect localhost:3001)

为什么这样有效?

举个例子,假设输入文件里有这样一行内容:

He said "Hello!" and waved \ goodbye!

  • 原来的echo "$line"会把末尾的\吃掉,输出变成He said "Hello!" and waved goodbye!(注意反斜杠消失了)。
  • 修改后的printf "%s\n" "$line"会完整输出原始内容,反斜杠和引号都被保留,openssl就能正确加密你想要的内容。

另外,别忘了给pass pass:"$password"里的$password加上引号,这样如果你的密码里包含空格或特殊字符,shell也不会错误解析。

内容的提问来源于stack exchange,提问作者Etalam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:57:32