Comandos intermediários do GNU/Linux
Os operadores > e >> são usados para redirecionar a saída de um programa para um arquivo. A sintaxe é muito simples que dá pena:
* comando > arquivo
* comando >> arquivo
O operador >
$ ls > arqsA saída não será nenhuma se tudo ocorreu bem. Agora ao dar “ls” normalmente você verá um arquivo a mais que é o ‘arqs’. Tente dar um cat:
$ cat arqs
(saída do cmd ‘ls’)
Você pode usar o comando echo para escrever mensagens personalizadas. Veja como:$ echo “É só um teste” > arqs
$ cat arqs
É só um teste
Algumas características:
* O arquivo será sobrescrito! Cuidado para não fazer nenhuma m…
* Caso não se tenha permissão para escrever no arquivo, vai dar erro (o que tu esperava?).
* Caso o arquivo não exista, ele será criado.
O operador >>
Seria a mesma coisa que o >, mas com uma diferença: ele não sobrescreve o arquivo. Neste caso você poderá escrever mais. Dê uma olhada:
$ rm teste
-> É bom, caso o arquivo exista poderá nos atrapalhar um pouco
$ echo “Os arquivos são:” >> teste
$ ls ~ >> teste
$ echo “Fim dos arquivos:” >> teste
$ cat teste
Os arquivos são:
(os arquivos do diretório $HOME)
Fim dos arquivos:
Tente fazer com o operador > e compare o resultado.
As características são a mesmas, com a diferença que o arquivo não será sobrescrito.
O operador <
A função deste operador é o contrário do >: ao invés de mandar a saída do comando para o arquivo, ele manda o arquivo como entrada do comando.
$ less
Vai
digitando
qualquer
coisa
aqui
^D
Então aparecerá o “less” listando o texto página a página. O ^D no final, quer dizer, “Ctrl+D”, significa “Fim de arquivo”.
Agora tente fazer um arquivo com o nome de “teste”, digite qualquer coisa.
$ less < teste
(saída do comando less)
Seria o mesmo que você digitar tudo que tem no arquivo como entrada, mas como o pessoal do Unix tem bom senso :), eles automatizaram isso. O ^D também é automatizado.
Este operador pode facilmente ser substituído pelo pipe (|), junto com o comando ‘cat’.
O operador 2>
Quando vai se testar o operador >, você pode facilmente verificar que ele não redireciona mensagens de erro. Por exemplo:
(supondo que o arquivo arq.teste não existe)
$ cat arq.teste > novo texto aqui
cat: arq.teste: file not found
$ cat novo texto aqui
O operador 2> tem esta função: redirecionar somente as mensagens de erro para um arquivo. Vejamos o mesmo exemplo acima:
$ cat arq.teste 2> aaa
$ cat novo texto aqui
cat: arq.teste: file not found
Poderemos também usar este operador em conjunto com o > ou >>, veja como:
$ comando > out 2> err
OBS: “out” e “err” podem variar
O pipe
Este é, com certeza, o mais importante de todos os operadores de redirecionamento. O pipe é bem complexo ao se comparar com os outros operadores, mas vale è pena conhecer.
A sintaxe:
$ comando1 | comando2
O que o pipe faz é redirecionar a saída do comando1 para entrada do comando2.
Imagine que o comando “comando1” mostre a frase “evandro couto” e o comando “comando2” transforma cada espaço em um ‘-‘. Veja:
Resultado dos dois comando seria
* cat
* less
* more
* sed
* awk
* etc
- ; separa um comando do outro
- 2>&1 transforma a StdErr em StdOut
- && operador “e”, testa o valor da variável $?
- || operador “ou”, testa o valor da variável $?
- $!: PID do último processo executado
- $$: PID do shell atual
- $?: Retorna o valor 0 se o últim comando foi bem sucedido, caso contrário retorna o valor 1