Qual é a ordem dos comandos executados que possuem redirecionamento de pipeline e de saída?
Digamos que façamos o seguinte:
Charles@myzone:/tmp$ mkdir /tmp/testdir
Charles@myzone:/tmp$ cd /tmp/testdir
Charles@myzone:/tmp/testdir$ touch file1 file2
Charles@myzone:/tmp/testdir$ ls | wc -l
2
Charles@myzone:/tmp/testdir$ ls | wc -l > ls_result
Charles@myzone:/tmp/testdir$ cat ls_result
3
Eu sei que se você fizer ls > result
isso result
, conterá o nome de si mesmo, porque o shell fará algo como
1) criar/abrir arquivo chamado result
2) definir o fd result
para ser stdout 3) execls
Eu esperava ls_result
ter o valor 2, mas é 3.
Pergunta
Como o comando ls | wc -w > ls_result
acima é executado?
É equivalente a (ls | wc -w ) > ls_result
?
Alguns links com informações relativas? (Pesquisei o manual do bash)
não é equivalente a
mas para
Os dois utilitários são iniciados praticamente ao mesmo tempo, o que significa que você espera que seu comando às vezes retorne 3 e às vezes 2.
Exemplo:
O exemplo acima mostra que o arquivo criado pelo lado direito do pipeline às vezes é detectado pelo lado esquerdo do pipeline.
homem bash
então, quando você executa o comando, ls_result está sendo criado e então executa o comando ls. É por isso que a saída vem como 3.