
"ls -l | wc -l" gera "1+no. file/directories"(um extra para a primeira linha).
No entanto, quando executo o comando ls -l | wc -l > temp (quando a saída é redirecionada para um novo arquivo temporário). O valor armazenado no arquivo temporário é 1 a mais que o valor que foi gerado sem redirecionamento. Acho que é por causa do novo arquivo "temp" criado, mas o arquivo temporário deveria ter sido criado após a execução do comando ls -l e, portanto, a saída deve ser igual à saída sem redirecionamento.
Alguém por favor ajude
Responder1
Este é um comportamento perfeitamente normal.
O que acontece é que o shell (sh, bash, csh, ksh, qualquer que seja) primeiro lê toda a linha de comando.
Em seguida, constrói os processos, canais e arquivos de redirecionamento emordem da direita para a esquerdae só então executa os comandos reais.
Portanto, o arquivo de redirecionamento (temp) é criado ANTES do comando ls ser executado.
Tem que ser, porque o identificador de arquivo associado a "temp" precisa estar disponível para ser usado como destino para a saída wc, antes que wc seja realmente iniciado.
O comando wc, por sua vez, precisa ser configurado, antes que a saída de ls possa ser anexada ao identificador de arquivo que será a entrada para wc.
Embora pareça um pouco ilógico a princípio, isso faz todo o sentido quando você entende a maneira como os shells constroem sua sequência de comandos.
Responder2
Na verdade, o shell cria o temp
arquivo antes de começar a executar os comandos, então você sempre verá o temp
arquivo contado. Se você não quiser que ele seja contado, coloque o arquivo temporário em outro lugar, como talvez em /tmp
. Ou apenas subtraia um da contagem obtida.