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

如何抑制Shell脚本中以下命令的cat输出?

解决Shell脚本中抑制cat输出的问题

你的脚本里用cat <<EOS读取here-doc内容时,多余的-c参数会触发无效命令执行,同时cat会把here-doc内容输出到终端。要彻底解决这个问题,最直接的方式是避免不必要的cat调用,用Shell原生语法完成变量赋值即可消除cat输出。

修正后的基础写法

curl=$(cat <<'EOS'
curl -s https://api.openai.com/v1/completions \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer foo" \
  -d '{
"model": "text-davinci-003",
"prompt": "$1",
"max_tokens": 4000,
"temperature": $2
}' \
--insecure | jq '.choices[]'
EOS
)
eval "${curl}" | tee "$newFileName"

关键调整点

  • 移除多余的-c参数,避免触发无效命令
  • 用$(...)替代反引号(更现代的命令替换写法,可读性更强)
  • 给EOS加单引号,防止here-doc内的$1、$2提前展开,保留到eval阶段再解析
  • 用反斜杠\连接多行命令,让脚本结构更整洁

彻底抛弃cat的优化写法

Shell支持直接通过here-doc给变量赋值,完全不需要调用cat,从根源上消除cat输出:

read -r -d '' curl <<'EOS'
curl -s https://api.openai.com/v1/completions \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer foo" \
  -d '{
"model": "text-davinci-003",
"prompt": "$1",
"max_tokens": 4000,
"temperature": $2
}' \
--insecure | jq '.choices[]'
EOS
eval "${curl}" | tee "$newFileName"

更安全的替代方案(避免eval)

eval存在安全风险,若参数包含特殊字符可能导致意外执行。推荐把curl命令封装成函数,完全规避cat和eval的问题:

call_openai() {
  curl -s https://api.openai.com/v1/completions \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer foo" \
    -d '{
"model": "text-davinci-003",
"prompt": "'"$1"'",
"max_tokens": 4000,
"temperature": '"$2"'
}' \
--insecure | jq '.choices[]'
}
call_openai "$1" "$2" | tee "$newFileName"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:25:55