<Anterior | Conteúdo | Próxima>
Redirecionando a saída padrão
O redirecionamento de E / S nos permite redefinir para onde vai a saída padrão. Para redirecionar a saída padrão para outro arquivo em vez da tela, usamos o operador de redirecionamento “>” seguido pelo nome do arquivo. Por que queremos fazer isso? Geralmente é útil armazenar a saída de um comando em um arquivo. Por exemplo, podemos dizer ao shell para enviar a saída do ls comando para o arquivo ls-saída.txt em vez da tela:
[me @ linuxbox ~] $ ls -l / usr / bin> ls-output.txt
[me @ linuxbox ~] $ ls -l / usr / bin> ls-output.txt
Aqui, criamos uma longa lista de / usr / bin diretório e enviou os resultados para o arquivo
ls-output.txt. Vamos examinar a saída redirecionada do comando:
[me @ linuxbox ~] $ ls -l ls-saída.txt
-rw-rw-r-- 1 me me 167878 2016/02/01 15:07 ls-output.txt
[me @ linuxbox ~] $ ls -l ls-saída.txt
-rw-rw-r-- 1 me me 167878 2016/02/01 15:07 ls-output.txt
Boa; um arquivo de texto grande e bonito. Se olharmos para o arquivo com menos, veremos que o arquivo
ls-output.txt realmente contém os resultados do nosso comando ls:
[me @ linuxbox ~] $ menos ls-output.txt
[me @ linuxbox ~] $ menos ls-output.txt
Agora, vamos repetir nosso teste de redirecionamento, mas desta vez com uma variação. Vamos mudar o nome do diretório para um que não existe:
[me @ linuxbox ~] $ ls -l / bin / usr> ls-output.txt
ls: não é possível acessar / bin / usr: esse arquivo ou diretório não existe
[me @ linuxbox ~] $ ls -l / bin / usr> ls-output.txt
ls: não é possível acessar / bin / usr: esse arquivo ou diretório não existe
Recebemos uma mensagem de erro. Isso faz sentido, uma vez que especificamos o diretório inexistente / bin / usr, mas por que a mensagem de erro foi exibida na tela em vez de ser redirecionada para o arquivo ls-saída.txt? A resposta é que o ls o programa não envia suas mensagens de erro para a saída padrão. Em vez disso, como a maioria dos programas Unix bem escritos, ele envia suas mensagens de erro para o erro padrão. Como redirecionamos apenas a saída padrão e não o erro padrão, a mensagem de erro ainda era enviada para a tela. Vamos ver como
Redirecionando a saída padrão
para redirecionar o erro padrão em apenas um minuto, mas primeiro, vamos ver o que aconteceu com nosso arquivo de saída:
[me @ linuxbox ~] $ ls -l ls-saída.txt
-rw-rw-r-- 1 me me 0 2016/02/01 15:08 ls-output.txt
[me @ linuxbox ~] $ ls -l ls-saída.txt
-rw-rw-r-- 1 me me 0 2016/02/01 15:08 ls-output.txt
O arquivo agora tem comprimento zero! Isso ocorre porque, quando redirecionamos a saída com o operador de redirecionamento “>”, o arquivo de destino é sempre reescrito desde o início. Uma vez que nossa ls comando não gerou nenhum resultado e apenas uma mensagem de erro, a operação de redirecionamento começou a reescrever o arquivo e então parou por causa do erro, resultando em seu truncamento. Na verdade, se precisarmos truncar um arquivo (ou criar um novo arquivo vazio), podemos usar um truque como este:
[me @ linuxbox ~] $ > ls-output.txt
[me @ linuxbox ~] $ > ls-output.txt
Simplesmente usar o operador de redirecionamento sem nenhum comando anterior truncará um arquivo existente ou criará um novo arquivo vazio.
Então, como podemos acrescentar a saída redirecionada a um arquivo em vez de sobrescrever o arquivo desde o início? Para isso, utilizamos o operador de redirecionamento “>>”, assim:
[me @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt
[me @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt
Usar o operador “>>” resultará na saída sendo anexada ao arquivo. Se o arquivo ainda não existir, ele será criado como se o operador “>” tivesse sido usado. Vamos testar:
[me @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [me @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [me @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [me @ linuxbox ~] $ ls -l ls-saída.txt
-rw-rw-r-- 1 me me 503634 2016/02/01 15:45 ls-output.txt
[me @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [me @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [me @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt [me @ linuxbox ~] $ ls -l ls-saída.txt
-rw-rw-r-- 1 me me 503634 2016/02/01 15:45 ls-output.txt
Repetimos o comando três vezes, resultando em um arquivo de saída três vezes maior.