Substituição de comando versus redirecionamento de E / S?

6

Eu me pergunto sobre as diferenças entre redirecionamento de E / S e substituição de comando ?

Por exemplo, quando eu quiser redirecionar a saída do comando which para o comando cd (sei que não é um diretório), o comando cd não usa o redirecionamento which .
Por exemplo, which w3af | cd ? Eu tenho que usar a substituição de comandos como cd $( which w3af ) , por quê?

    
por koralgooll 02.04.2014 / 12:32

2 respostas

4

Para o exemplo específico que você citou, você precisa usar a substituição de comando:

cd -P -- "$(dirname -- "$(which w3af)")"

pela simples razão de que cd não recebe entrada via STDIN . Aceita apenas parâmetros.

Além disso, which command produziria um caminho para um arquivo e não um diretório.

    
por 02.04.2014 / 12:37
1

Aqui está uma maneira de testar se um comando aceitará stdin ou não. Lembre-se, isso dificilmente é exaustivo:

% { wc ; cat ; } <<INTEST
    nope
INTEST

> 1 1 5

% { cd ; cat ; } <<INTEST
    nope
INTEST

> nope
    
por 02.04.2014 / 14:15