【问题标题】:Bash Shell IssueBash Shell 问题
【发布时间】:2016-03-30 09:46:09
【问题描述】:
currentDate="20160324"
headerDumpFile="header.txt"
#currentDate="$(date +’%Y%m%d’)"
printf "Current date in dd/mm/yyyy format %s\n" $currentDate

contId=""
labelList="c12,playlist-play,play,pause,end,playlist-end,heartbeat,ns_st_cl"

params="corporate=abc&user=abc&password=abc&startdate=$currentDate&site=abc&extralabels=$labelList"
url="https://example.com/v1/start?$params"

a=1

while true
do
curl -D $headerDumpFile -v -k -H "Accept-Encoding:gzip" $url > $a.zip 
contId= cat $headerDumpFile | grep "X-CS-Continuation-Id:" | awk '{print $NF}'

if [ "$contId" ];then
    printf "Breaking the Loop.."
    break;
fi
url="https://example.com/v1/start?$params&continuationId=${contId}"
a=$((a + 1))
echo $contId
echo $url
done

当我回显 url 时,它的 contId 给定值为空白,但当我回显 $contId 时。它的打印正确。请建议

【问题讨论】:

  • 请贴出真实的脚本代码,尤其是设置contId变量的那行已经坏了。
  • 它在 While 循环中设置.....
  • 不是,仔细看。该变量在 subsehll(管道组件)中被临时清除,当然不是真正的脚本想要做的。
  • 当我回显它正在被打印时,它不会在最后一行被连接....m 是新的 shell 脚本,因此在此代码 contId 刚刚初始化之前,任何反馈都将受到赞赏......
  • 发布的整个代码从未将contId 变量设置为空字符串。它显示为空白也就不足为奇了。

标签: bash shell curl


【解决方案1】:

也许这就是你想要达到的目标:

contId=$(cat $headerDumpFile | grep "X-CS-Continuation-Id:" | awk '{print $NF}')

或者更简单的:

contId=$(awk '/X-CS-Continuation-Id:/ {print $NF}' $headerDumpFile)

请注意,与您的猜测不同,echo $contId 没有在您的代码中显示任何内容。显示的是伪造的contId= cat $headerDumpFile | grep "X-CS-Continuation-Id:" | awk '{print $NF}' 行的结果。

【讨论】:

  • 那么你的逻辑可能有缺陷。您应该说出包含header.txt 的内容。不知不觉就很难走得更远。
  • 恐怕不行。你为什么想要它?
  • 并详细说明 cmets 而不是“它不工作”之类的东西,这对于弄清楚你做了什么测试以及你得到了什么结果是没有用的。
  • 成功了。我使用了 contId=$(awk '/X-CS-Continuation-Id:/ {print $NF}' $headerDumpFile)...谢谢 :)...请告诉我为什么它不适用于之前的语句跨度>
  • 我的两个建议都是等效的,所以应该产生相同的结果。如果后者对您有用,那么前者也应该有。我已经写了几次为什么您的代码无法正常工作,您正在清除变量并运行管道,而不是用管道的结果影响变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 2018-05-22
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多