请向我解释为什么最后echo一句话是空白的?我希望XCODE在while循环中将其增加到1:#!/bin/bashOUTPUT="name1 ip ip status" # normally output of another command with multi line outputif [ -z "$OUTPUT" ]then echo "Status WARN: No messages from SMcli" exit $STATE_WARNINGelse echo "$OUTPUT"|while read NAME IP1 IP2 STATUS do if [ "$STATUS" != "Optimal" ] then echo "CRIT: $NAME - $STATUS" echo $((++XCODE)) else echo "OK: $NAME - $STATUS" fi donefiecho $XCODE我尝试使用以下语句代替++XCODE方法XCODE=`expr $XCODE + 1`并且它也不会在while语句之外打印。我认为我在这里缺少有关变量范围的信息,但是联机帮助页没有向我显示。
3 回答
侃侃无极
TA贡献2051条经验 获得超10个赞
问题在于,与管道放在一起的进程在子外壳程序中执行(因此具有自己的环境)。while管内发生的任何事情都不会影响管道外部的任何内容。
您的具体示例可以通过将管道重写为
while ... do ... done <<< "$OUTPUT"
也许
while ... do ... done < <(echo "$OUTPUT")
明月笑刀无情
TA贡献1828条经验 获得超4个赞
另一种选择:
#!/bin/bash
cat /some/file | while read line
do
var="abc"
echo $var | xsel -i -p # redirect stdin to the X primary selection
done
var=$(xsel -o -p) # redirect back to stdout
echo $var
编辑:在这里,xsel是一项要求(安装它)。另外,您可以使用xclip: xclip -i -selection clipboard 代替 xsel -i -p
- 3 回答
- 0 关注
- 533 浏览
添加回答
举报
0/150
提交
取消