linux - 对 bash 行为感到困惑 - Bash/awk mystery

标签 linux bash shell awk ubuntu-15.10

为什么我在使用 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}

最佳答案

来 self 机器上 w(1) 的联机帮助页:

The w utility prints a summary of the current activity on the system, including what each user is doing.

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

关于linux - 对 bash 行为感到困惑 - Bash/awk mystery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34763078/

相关文章:

c - 管道只执行一次命令

bash - exec 抛出 "no such file or directory"但文件夹存在,文件也存在

windows - Cygwin 的 bash 不能运行 'net use/user' 命令?

linux - 列出具有指定深度的文件夹的所有子目录

linux - 如何检查 glibc 中的 fastbin 大小

linux - 使用 Linux 将特定数量的文件从一个目录复制到另一个目录

arrays - bash中多维数组的长度

linux - 在 shell 中获取给定一半的完整文件名

c - 为什么 fflush(stdin) 在 while 循环中执行两次以检查 scanf() 输入?

java - "Inject"命令进入正在运行的进程