grep dando resultados que não aparecem no contexto original

0

Sou novo no unix e já encontrei algo que acontece muito.

Eu digite um comando (por exemplo, ps -eo 'tty,pid,comm' ) e recebo o texto. Tanto quanto eu entendo, quando eu canalizar o resultado em grep deve procurar a saída e me dar de volta os resultados dessa saída.

Então, por que, então, recebo um resultado que não se parece nada com o comando ps ? Eu recebo de volta um texto longo que nem está na forma do comando ps original e consiste em informações obscuras e se parece com um arquivo de configuração.

    
por PanthersFan92 08.08.2016 / 15:27

1 resposta

3

Aparece, com base no seu comentário, que a saída que você está vendo é o conteúdo de arquivos que possuem um único nome de arquivo de caractere que corresponde ao nome do primeiro desses arquivos. A razão é que o caractere ? em seu comando grep está sendo expandido pelo shell antes de ser executado.

Assim, seu comando ps está fazendo o que deveria, mas o grep está ignorando completamente essa entrada em vez de digitar arquivos na linha de comando.

Demonstre isso por si mesmo fazendo algo como:

mkdir ~/tempdir
cd ~/tempdir
ps -eo 'tty,pid,comm' | grep ?

que criará um diretório vazio (sem arquivos), o que permitirá que o ? falhe em expandir e passe diretamente para o grep. Em seguida, crie dois arquivos como este:

touch a
echo thisisfilebwithana > b

e, em seguida, execute novamente apenas o grep, desta forma:

grep ?

e você verá

thisisfilebwithana

porque grep viu isto:

grep a b

que interpretou como "mostre-me todas as linhas do arquivo b que contêm um 'a'".

O que você provavelmente quer fazer é fugir do ponto de interrogação:

ps -eo 'tty,pid,comm' | grep \?

ou

ps -eo 'tty,pid,comm' | grep '?'
    
por 08.08.2016 / 16:58

Tags