给定bash脚本中的以下2行,
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'"在某些情况下,回显字符串如下所示。
访问“MultiPartIOSDemo”的截断$LOCATION
这种行为不一致,但当它复制时,格式错误的输出是一致的(即在某个范围内截断的$LOCATION )。
它看起来像是echo将字符串输出到缓冲区,但是curl的管道还没有完成,并最终将其输出写在顶部。
不太清楚。
更新
尝试了你所有的建议,但同样的问题也发生了。
现在放弃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因此,回显的输出在这两个日志上。
刚刚注意到在跟踪时发生了上述行为。
tail -fn 20 ~/.windmill/windmill.log但是如果我做了一个
more ~/.windmill/windmill.log我可以看到回音消息显示正确。注意换行符"^M“。想知道这是否与尾部解析日志的方式有关。
风车使用 $LOCATION ^M访问“MultiPartIOSDemo”
澄清了问题
经过以上的猜测,真的有两个问题。
发布于 2014-09-21 13:36:01
我会改变
$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'"发布于 2014-09-22 12:39:02
也许卷曲是在重述一个错误。您可以检查结果,只有在没有发生错误时才能解析结果。
# 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
fihttps://stackoverflow.com/questions/25958561
复制相似问题