Bash ps-ef{head-n1;sort;}意外输出

Bash ps-ef{head-n1;sort;}意外输出,bash,pipe,head,Bash,Pipe,Head,为什么下面的代码在第二行删去了单词的词根,并扭曲了输出,而不是与下面的所有行保持一致 # ps -ef | { head -n 1 ; sort ; } | head -n11 UID PID PPID C STIME TTY TIME CMD 470 2 0 Oct07 ? 00:00:00 [xfsaild/nvme4n1] apache 10210 5801 0 Oct12 ? 00:04:04

为什么下面的代码在第二行删去了单词
的词根
,并扭曲了输出,而不是与下面的所有行保持一致

# ps -ef | { head -n 1 ; sort ; } | head -n11

UID        PID  PPID  C STIME TTY          TIME CMD
      470     2  0 Oct07 ?        00:00:00 [xfsaild/nvme4n1]
apache   10210  5801  0 Oct12 ?        00:04:04 /var/site/fastcgi.pl                                 
apache   10211  5801  0 Oct12 ?        00:03:11 /var/site/fastcgi.pl                                 
apache   10212  5801  0 Oct12 ?        00:03:35 /var/site/fastcgi.pl                                 
apache   10265  5801  0 Oct12 ?        00:03:55 /var/site/fastcgi.pl                                 
apache   10325  5801  0 Oct12 ?        00:03:50 /var/site/fastcgi.pl                                 
apache   10328  5801  0 Oct12 ?        00:03:39 /var/site/fastcgi.pl                                 
apache   10329  5801  0 Oct12 ?        00:02:59 /var/site/fastcgi.pl                                 
apache   10330  5801  0 Oct12 ?        00:03:50 /var/site/fastcgi.pl                                 
apache   11889  3815  0 Oct08 ?        00:33:11 /usr/sbin/httpd -k start
我希望输出能够打印:

# ps -ef | { head -n 1 ; sort ; } | head -n2

UID        PID  PPID  C STIME TTY          TIME CMD
root       470     2  0 Oct07 ?        00:00:00 [xfsaild/nvme4n1]
这似乎是一种竞赛条件。有时,当我运行它时,它不会发生

$ ps -ef | { head -n 1 ; sort ; } | head -n3
UID          PID    PPID  C STIME TTY          TIME CMD
avahi       1328       1  0 Oct12 ?        00:00:08 avahi-daemon: running [danied.local]
avahi       1401    1328  0 Oct12 ?        00:00:00 avahi-daemon: chroot helper

当我启动此命令时,我得到的是:

Prompt> ps -ef | { head -n 1 ; sort ; } | head -n11
UID        PID  PPID  C STIME TTY          TIME CMD

Prompt> uname -a
Linux ...-Microsoft #488-Microsoft Mon Sep 01 13:43:00 ... GNU/Linux
这更有意义:
ps-ef
显示所有正在运行的进程,
head-n1
只显示第一行,其余的并不重要


您是否可以再次运行该命令并查看所有内容是否与您所说的一样,然后运行
uname-a
命令,以验证您使用的是哪种类型的机器?(env | grep-i“shell”的结果也可能有用)。只需相应地编辑您的问题。

您的命令受比赛条件的限制,更具体地说,
head-n1
可以在第二个命令获得任何输入之前关闭后面的管道,如果第一个命令也已结束

考虑这个例子:

>cat test.sh

对于((i=1;i)您的问题不清楚。没有样本数据。它不可复制。您的命令输出不是决定性的,因为双方都要求关闭管道,请检查以下示例。
> sh test.sh | { head -n1; tail -n +1; }
1
> sh test.sh | { head -n1; tail -n +1; }
1
2
3