首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用尾时,管道卷曲后面跟着回声有时会截断输出。

在使用尾时,管道卷曲后面跟着回声有时会截断输出。
EN

Stack Overflow用户
提问于 2014-09-21 11:09:45
回答 2查看 441关注 0票数 1

给定bash脚本中的以下2行,

代码语言:javascript
复制
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,脚本如下所示

代码语言:javascript
复制
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'"

这里有一些更多的细节。

包含上述行的脚本包装在

代码语言:javascript
复制
(
(
# bash script
) 2>&1 | tee $HOME/.windmill/$PROJECT_NAME.log

) 2>&1 | tee $HOME/.windmill/windmill.log

因此,回显的输出在这两个日志上。

刚刚注意到在跟踪时发生了上述行为。

代码语言:javascript
复制
tail -fn 20 ~/.windmill/windmill.log

但是如果我做了一个

代码语言:javascript
复制
more ~/.windmill/windmill.log

我可以看到回音消息显示正确。注意换行符"^M“。想知道这是否与尾部解析日志的方式有关。

风车使用 $LOCATION ^M访问“MultiPartIOSDemo”

澄清了问题

经过以上的猜测,真的有两个问题。

  1. 在什么情况下,^M会出现在日志中?
  2. 为什么尾解析日志是错误的,即解析^M时,它首先输出"for accessing‘MultiPartIOSDemo“,然后输出顶部的"Use $LOCATION”。
EN

回答 2

Stack Overflow用户

发布于 2014-09-21 13:36:01

我会改变

代码语言:javascript
复制
$WINDMILL_BASE_URL/windmill/rest/windmill/$USER

代码语言:javascript
复制
"$WINDMILL_BASE_URL/windmill/rest/windmill/$USER"

(2)使用tee进行调试;(3)使用awk来匹配"^location“而不是grep。

代码语言:javascript
复制
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'"
票数 0
EN

Stack Overflow用户

发布于 2014-09-22 12:39:02

也许卷曲是在重述一个错误。您可以检查结果,只有在没有发生错误时才能解析结果。

代码语言:javascript
复制
# 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25958561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档