Grep resultado do comando, redirecionamento vs pipe

1

Alguém pode explicar por que os dois comandos abaixo fornecem resultados diferentes?

O primeiro canaliza a saída de who para grep, o segundo leva a saída de who como um redirecionamento.

~: who |grep $(tty|cut -c 6-)
my_username tty1         2016-01-22 09:56 (:0)

~: grep $(tty|cut -c 6-) <(who)
my_username pts/5        2016-01-22 11:35 (:0.0)

Usar color=always como uma opção para grep nos dois casos fornece a primeira correspondência como tty . O segundo corresponde a pts/5 como esperado.

O comando tty | cut -c 6- me dá (neste exemplo) a parte pts/5 de /dev/pts/5 .

Eu tentei usar cotações ( ' e " ) em várias partes, mas sem sucesso.

Eu percebo agora que o comando who -m dá a linha que eu estava atrás, mas a questão de por que as linhas acima são diferentes ainda permanece.

    
por Holloway 22.01.2016 / 13:32

1 resposta

0

O focus é quando o shell executa a instrução $(...) .

 echo $(tty)       # answers me for example /dev/pts/xx
 who | echo $(tty) # answers me 'not a tty'

Então em um processo de pipe a versão atual do bash (GNU bash, versão 4.3.11) chama outro subshell .
Você pode ler mais sobre o Guia do Bash para Iniciantes [ 1 ], [ 2 ] .

Não deixe o título enganá-lo ... ele está cheio de boas informações, não só para os iniciantes.

    
por 26.01.2016 / 11:27