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

脚本中用bash变量token调用curl返回无效数据,手动执行正常如何解决?

问题描述

用户执行以下bash脚本时,虽然echo输出的token显示正确,但通过curl请求返回的data无效;但手动将token写入curl命令却能获取正确数据:

bash get-token.sh | grep x-subject-token | awk '{print $2}' >> token.txt

token=`cat token.txt`

echo $token this is true

data=`curl -s -H "X-Auth-Token: ${token}"  -X GET "https://url"`

echo $token = correct token but $data is invalid.
问题原因

核心问题大概率是token中包含不可见控制字符(比如换行符、多余空格):

  • 通过>> token.txt写入文件时,会额外添加换行符;后续cat token.txt读取时会把这个换行符也带入token变量
  • grep或awk的输出可能附带了不可见字符,echo输出时会自动忽略,但curl请求时会把这些字符作为token的一部分发送,导致认证失败
解决方案

1. 直接赋值token,跳过文件中转(推荐)

去掉文件写入和读取的步骤,直接将token结果赋值给变量,避免中间步骤引入的多余字符:

token=$(bash get-token.sh | grep x-subject-token | awk '{print $2}')

echo "$token" this is true

data=$(curl -s -H "X-Auth-Token: ${token}" -X GET "https://url")

echo "$token = correct token, data: $data"

2. 清理token中的不可见字符

如果必须保留文件中转的方式,读取token时清理掉换行符和多余空格:

bash get-token.sh | grep x-subject-token | awk '{print $2}' > token.txt  # 用>而不是>>避免重复写入旧token

# 方式1:用xargs去除多余空格和换行
token=$(xargs < token.txt)
# 方式2:用tr删除换行符
token=$(tr -d '\n' < token.txt)

echo "$token" this is true

data=$(curl -s -H "X-Auth-Token: ${token}" -X GET "https://url")

3. 验证token的实际内容

如果还是有问题,可以用以下命令查看token的真实内容(包括不可见字符):

echo "$token" | od -c

如果输出中包含\n(换行符)或其他非打印字符,说明需要进一步清理。

4. 合并curl命令(简化版)

可以直接在curl的Header中嵌入token获取命令,减少变量赋值步骤:

data=$(curl -s -H "X-Auth-Token: $(bash get-token.sh | grep x-subject-token | awk '{print $2}')" -X GET "https://url")
echo "$data"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:40:34