- Redirecionando a saída padrão
Ao invés da saída ser exibida na tela, ela irá para um arquivo:comando > arquivo_de_saida
Por exemplo, vamos salvar os arquivos da sua pasta de executáveis:
ls /etc/bin > bin.txt
Para ver:
cat bin.txt | more
- Redirecionando a entrada padrão
Ao invés da entrada ser o teclado, ela pode ser um arquivo.Por exemplo, vamos usar o comando 'wc', que calcula o número de linhas, de palavras e o tamanho em bytes para descobrir a quantidade de comandos que você pode usar no seu sistema:
wc < bin.txt
A resposta é o primeiro elemento.
Nesse caso, o comando 'wc' recebe informações do bin.txt, e não do teclado (quer seria o padrão).
- Redirecionando o erro padrão
A maior utilidade do sistema gerar erros e tratá-los como arquivos é que você pode redirecioná-los.Por exemplo, enquanto um processo é direcionado com sua saída para um arquivo (de log, por exemplo) o erro pode pode ser direcionado para o terminal. Assim, você vê na tela os erros enquanto o processo está a ocorrer em background.
Para redirecionar o erro, use o file descriptor 2 antes do '>'. Veja:
ls /pasta/inexistente 2> erro.log
Depois veja o conteúdo de erro.log:
cat erro.log
Deve mostrar a mensagem de erro, informando que não existe tal diretório ou arquivo.
- Redirecionando saída e erro padrões
Se você quer direcionar sempre o erro pro mesmo lugar da saída, use :ls /usr/bin > bin.txt 2>&1
Interprete na ordem. Primeiro o comando passa os dados pra saida, que é o arquivo bin.txt .
Caso surja algum erro, ele é envidado (2>) para '&1' .
E onde é esse &1? '&1' guarda o local da saída, por isso o 1 (lembre-se: stdin 0, stdout 1 e stderr 2), sejá lá onde for (nem sempre sabemos).
Não coloque espaços ao redor de '2>&1'. Escreva tudo junto mesmo, pois o '&' é outro comando.
Um atalho para redirecionar ambos, saída e erro, para um arquivo só, é usar '&>'
ls /diretorio/inexistente &> ambos.log
- Anexando informações
Quando se usa o operador '>' pra saída, devemos tomar muito cuidado, pois se houver um arquivo com o mesmo nome, ele simplesmente substitui, sem aviso prévio.Se você quiser criar um arquivo de registro (log), o ideal é usar o operador '>>' que anexa, sempre, ao fim do arquivo, as novas informações, e caso o arquivo não exista, ele cria o tal.
Vamos testar com o comando 'uptime', que dentre outras funções, informa a hora atual e há quanto tempo seu computador está ligado:
uptime >> time.log
uptime >> time.log
cat time.log
- Apagando
Pra apagar o conteúdo do arquivo, usa ':>' ::> bin.txt
Note que ele apagou o conteúdo, mas o bin.txt ainda continua lá.
Muito cuidado pra não digitar o nome errado do arquivo.
- /dev/null : descartando a saída
Muitas vezes não queremos ver o conteúdo de uma saída, como o resultado do ls, queremos ver apenas se ele gera erro, para testar um comando ou testar uma condição em Shell Scripting.Para tal, redirecione sua saída para '/dev/null' :
ls /usr/bin > /dev/null
Um comentário:
Recebi o importante comentário do usuário leandro, do site Viva o Linux:
Apenas uma ressalva: como é relativamente comum se utilizar o sh como interpretador em shell scripts, vale ressaltar que ele não reconhece o redirecionador &>. Ou seja, o comando:
ls /pasta/inexistente &> ambos.log
Não funcionaria no sh, e portanto, nos scripts que utilizam o cabeçalho #!/bin/sh. Apenas os que utilizam o bash (#!/bin/bash) ou outro interpretador (como o zsh).
Isso porque o sh reconhece o "&>" apenas como "&", que executa o comando em background.
Postar um comentário