2

为什么我在使用 Bash shell 时会得到这个输出?我不明白,因为如果我直接运行命令,我总是得到相同的输入(“:0”)

oneUser $ w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}'
:0
oneUser $ w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}'
:0
oneUser $ w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}'
:0

但是之后:

oneUser $ TEST=$(w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}')
oneUser $ echo $TEST

oneUser $ TEST=$(w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}')
oneUser $ echo $TEST

oneUser $ TEST=$(w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}')
oneUser $ echo $TEST
:0
oneUser $ TEST=$(w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}')
oneUser $ echo $TEST

oneUser $ TEST=$(w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}')
oneUser $ echo $TEST

oneUser $ TEST=$(w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}')
oneUser $ echo $TEST

oneUser $ TEST=$(w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3}')
oneUser $ echo $TEST
:0

编辑 1:“w -h oneUser”的输出

oneUser  :0       :0               08:37   ?xdm?  20:23   0.17s /sbin/upstart --user
oneUser  pts/5    :0               08:51    0.00s  1.73s  0.00s w -h oneUser

编辑 2:也打印 0 美元:

oneUser $ TEST=$(w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $0,$3}')
oneUser $ echo $TEST

oneUser $ TEST=$(w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $0,$3}')
oneUser $ echo $TEST
oneUser pts/5 :0 08:51 1.00s 1.82s 0.00s awk /w -h/ {if($3 ~ /^:/) print $0,$3} :0

编辑3:我发现有时:

oneUser $ w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3,$0}'
:0 oneUser  pts/5    :0               08:51    2.00s  1.97s  0.00s w -h oneUser
oneUser $ w -h oneUser | awk '/w -h/ {if($3 ~ /^:/) print $3,$0}'
:0 oneUser  pts/5    :0               08:51    3.00s  1.97s  0.00s awk /w -h/ {if($3 ~ /^:/) print $3,$0}
4

1 回答 1

1

从我机器上w(1)的联机帮助页:

w 实用程序打印系统上当前活动的摘要,包括每个用户在做什么。

当你构建一个类似的管道时w -h oneUser | awk,你正在做两件事:运行w一个 running awk。您的实验表明,在您的系统上,w检查运行复杂命令的用户的输出不是确定性的,并且可以将管道的任何部分显示为“当前活动”。更改您的awk脚本以添加一些调试演示,以便更好地理解这一点。

于 2016-01-13T09:49:27.080 回答