【发布时间】:2014-09-21 11:09:45
【问题描述】:
鉴于 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'"
在某些情况下,echo 字符串如下所示。
用于访问“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
因此 echo 的输出在两个日志上。
刚刚注意到拖尾时出现上述行为,例如
tail -fn 20 ~/.windmill/windmill.log
但是如果我做一个
more ~/.windmill/windmill.log
我可以看到回显消息正确显示。注意换行符“^M”。想知道它是否与tail解析日志的方式有关。
[windmill] 使用 [正确的 $LOCATION] ^M 访问“MultiPartIOSDemo”
澄清问题
综上所述,猜猜确实有2个问题。
- 什么情况下^M会出现在日志中?
- 为什么 tail 解析日志错误,即解析 ^M 的方式是先输出“用于访问 'MultiPartIOSDemo'”,然后在顶部输出“使用 $LOCATION”。
【问题讨论】:
-
你在使用 Cygwin 吗?您可以使用 "tr '\015' '\012' " 将 ^m 更改为新行
-
不使用 Cygwin。这是在 OS X 10.9.5