在bash脚本中给出以下两行,
LOCATION=$(curl -i -H "Windmill-Name: $APPLICATION_NAME" -H "Windmill-Identifier: $CFBundleIdentifier" -F "ipa=@$IPA" -F "plist=@$PLIST" $WINDMILL_BASE_URL/windmill/rest/windmill/$USER | grep ^Location | awk '{print $2}')
echo "[windmill] Use $LOCATION for accessing '$APPLICATION_NAME'"
在某些情况下, echo 字符串如下所示。
用于访问' MultiPartIOSDemo' [截断的$ LOCATION]
行为不一致但是当它再现时,格式错误的输出是一致的(即某个范围内的截断$ LOCATION)。
看起来echo将字符串输出到缓冲区,但卷曲的管道尚未完成,最终将其输出写在顶部。
无法说清楚。
更新
尝试了所有建议,但也出现了同样的问题。
现在已经删除了grep,脚本看起来像这样
LOCATION=$(curl -i -H "Windmill-Name: $APPLICATION_NAME" -H "Windmill-Identifier: $CFBundleIdentifier" -F "ipa=@$IPA" -F "plist=@$PLIST" "$WINDMILL_BASE_URL/windmill/rest/windmill/$USER" | awk -W '/^Location/ {print $2}')
echo "[windmill] Use $LOCATION for accessing '$APPLICATION_NAME'"
以下是一些更多细节。
包含上述行的脚本包含在
中(
(
# bash script
) 2>&1 | tee $HOME/.windmill/$PROJECT_NAME.log
) 2>&1 | tee $HOME/.windmill/windmill.log
因此 echo 的输出在两个日志上。
注意到拖尾时出现上述行为,例如
tail -fn 20 ~/.windmill/windmill.log
但是,如果我做了
more ~/.windmill/windmill.log
我可以看到回显消息正确显示。注意换行符" ^ M"。想知道它是否与tail解析日志的方式有关。
[windmill]使用 [更正$ LOCATION] ^ M 访问' MultiPartIOSDemo'
澄清问题
经过以上所有猜测,确实有两个问题。
答案 0 :(得分:0)
我会(1)改变
$WINDMILL_BASE_URL/windmill/rest/windmill/$USER
到
"$WINDMILL_BASE_URL/windmill/rest/windmill/$USER"
(2)使用tee进行调试 (3)使用awk匹配“^ location”而不是grep
LOCATION=$(curl -i -H "Windmill-Name: $APPLICATION_NAME" -H "Windmill-Identifier: $CFBundleIdentifier" -F "ipa=@$IPA" -F "plist=@$PLIST" "$WINDMILL_BASE_URL/windmill/rest/windmill/$USER" | tee /tmp/debug.$$ | awk ' /^Location/ {print $2}')
echo "[windmill] Use $LOCATION for accessing '$APPLICATION_NAME'"
答案 1 :(得分:0)
也许curl会返回一个错误。您可以检查结果,只有在没有错误发生时才解析它
# Create a trace file
tfile=/tmp/trace.$$
# uncomment this line if you want to delete the trace file at the end of the script
#trap "/bin/rm $tfile" 0 1 15
curl -i -H "Windmill-Name: $APPLICATION_NAME" -H "Windmill-Identifier: $CFBundleIdentifier" -F "ipa=@$IPA" -F "plist=@$PLIST" "$WINDMILL_BASE_URL/windmill/rest/windmill/$USER" >$tfile
status=$?
if [ $status -eg 0 ]
then
echo curl was successful
LOCATION=$(awk '/^Location/ {print $2}' <$tfile)
echo "[windmill] Use $LOCATION for accessing '$APPLICATION_NAME'"
else
echo curl exited with status $status
fi