为什么我在使用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}
答案 0 :(得分:1)
从我机器上 w(1)的联机帮助页:
w实用程序打印系统上当前活动的摘要, 包括每个用户正在做的事情。
当您构建像w -h oneUser | awk
这样的管道时,您正在做两件事:运行w
正在运行awk
。您的实验证明,在您的系统上,检查运行复杂命令的用户的w
输出不是确定性的,并且可以将管道的任何部分显示为“当前活动”。更改 awk 脚本以添加一些调试演示,以便更好地理解这一点。