Por que o echo * | rm -f não funciona?

1

Por que echo * | rm -f não funciona? De acordo com meu entendimento, echo * deve listar todos os arquivos no diretório e pipe deve enviar esta lista como um argumento para o comando rm -f , que deve excluir os arquivos. O que estou perdendo?

    
por Lavya 21.06.2013 / 13:08

2 respostas

7

O tubo envia dados para stdin. E não à lista de argumentos. Estes são dois conceitos muito diferentes.

Argumentos são o que está na linha após a linha de comando. O Stdin é basicamente como um arquivo que já está aberto, do qual você pode ler.

Por favor, note também que fazer coisas como esta: echo * | xargs rm -f é uma má idéia porque pode fazer coisas estranhas no caso de arquivos com espaços em nomes, ou com "-" no começo.

    
por 21.06.2013 / 13:15
1

Passe a saída de echo * como argumentos em vez de entradas de stdin do pipe.

rm -f 'echo *'
    
por 21.06.2013 / 13:18