por que piping pwd e echo não funciona? [duplicado]

2

Eu sou novo no unix. Eu digitei este comando no terminal do Ubuntu:

pwd | echo

Eu esperava ver a saída de pwd no terminal ( /home/fatemeh/Documents/Code/test )  mas a saída era apenas uma única linha vazia .

por que isso acontece?

    
por Fatemeh Karimi 27.07.2018 / 17:06

3 respostas

5

echo não faz nada com entrada padrão; ele só analisa seus parâmetros. Portanto, você está efetivamente executando echo , que, por si só, gera uma única linha vazia e a entrada padrão é descartada.

Se você quiser ver o comportamento que está tentando implementar, use uma ferramenta projetada para analisar a entrada padrão, como cat :

$ pwd | cat
/home/username

Se você realmente quiser usar echo para exibir o diretório de trabalho atual (ou a saída de outro comando), você pode usar a Substituição de Comando para fazer isso para você:

$ echo "Your shell is currently working in '$(pwd)'."
Your shell is currently working in '/home/username'.
    
por 27.07.2018 / 17:08
2

Como é indicado nas outras respostas, echo não lê de stdin para não imprimir a saída de pwd . Caso você não saiba, pwd imprime sua saída por conta própria, basta executar tudo sozinho para obter o resultado desejado.

$ pwd
/current/working/dir

Se você realmente quiser usar o eco para isso, use Substituição de comando . Isso passará a saída do seu comando ( pwd ) para echo como um parâmetro. Que novamente neste exemplo não é necessário, pois pwd produzirá sua própria saída ... para stdout.

$ echo "$(pwd)"
/current/working/dir
    
por 27.07.2018 / 17:14
1

O comando echo não lê da entrada padrão, escreve o que você diz para escrever. Neste caso, você não disse para escrever nada, então tudo o que foi impresso foi uma nova linha. pwd | echo é equivalente a apenas executar echo .

Se você quiser usar um canal, precisará usar algum comando que seja lido pela entrada padrão (por exemplo, cat ):

$ pwd | cat
/path/to/current/directory
$ 
    
por 27.07.2018 / 17:08