Pergunta

ls > ls.out

isso vai incluir ls.out na lista também. O meu entendimento é:> (operador de shell redirecionamento de saída é a criação de um arquivo primeiro (para tomar o STDOUT) se não for já existente e, em seguida, o comando ls está vindo para jogar e está incluindo o recém-criado ls.out arquivo na saída. Isso é correto? Se não, você pode por favor elaborar o funcionamento desse comando.

Da mesma forma

wc temp > temp

Será imprimir 0 0 0 temperatura dentro do arquivo temporário recém-criado.

Este comportamento do shell é interessante. Pergunto-me, como ele está realmente trabalhando. BTW, ambos são exercícios no Unix Programação Ambiente Book. Como eu mencionei a resposta acima, eu quero algum especialista para corrigir o meu entendimento.

Foi útil?

Solução

Ao redirecionar a saída padrão com >, o shell irá criar o arquivo (como um arquivo vazio) se ele ainda não existir. Além disso, esse arquivo é aberto antes de os garfos de shell e executivos o comando a ser executado. Quando você faz wc temp > temp, o shell abre o arquivo para escrever e, em seguida, garfos e execs wc, passando em seus arquivos abertos no processo.

Outras dicas

simplificação:

ls está olhando para o inode (entrada de diretório) que o redirecionamento criado.

wc pode ver o inode que o redirecionamento criado, mas quando se olha para o conteúdo que eles estão vazios porque (wc) não escreveu ainda.

Editar:

Em primeiro lugar, em ambos os casos, o redirecionamento (>ls.out ou >temp) cria um arquivo vazio. Uma entrada (inode) no diretório é feita para apontar para o local do arquivo e contêm algumas informações sobre ele. Veja o artigo da Wikipedia sobre inodes .

A seguir, no caso de ls, todas as entradas no diretório, incluindo um para ls.out que acabou de ser criada , são lidos e escritos para stdout (que, neste caso, torna-se o conteúdo do ls.out).

Ou, no caso de wc, ele está contando as contagens de nova linha, palavra e byte do arquivo chamado temp recentemente criado que está vazio para que ele escreve a contagem de zero para o arquivo depois ele conta (nada).

O conteúdo dos arquivos (temp ou ls.out) não são escritas até depois de toda a leitura é feito de modo que eles não podem ter sido incluídos.

Para um melhor maneira de comparar que ls e wc estão fazendo, tentar este comando (quando ls.out é inexistente):

ls -l > ls.out

Você deverá ver que o tamanho do arquivo para ls.out é zero de acordo com a lista contida dentro (cat ls.out), mas se você fizer ls -l ls.out você verá que não é zero. Isso corresponde ao que você vê acontecendo com wc.

considerar wc -l temp > temp

Se temp já existia e tinha dizer 20 linhas ainda o resultado de cat temp depois de executar o comando acima, será 0 temporário.

Eu acho que isso é porque o shell cria um novo temp vazia mesmo se temp existiu, assim, substituir a temperatura existente e, portanto, quando tenta wc para contar o num de linhas em temp ele recebe zero.

Com efeito > temp é executado pelo shell primeiro e depois wc -l temp é executado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top