uuencode
é o comando. host-file
é seu argumento. < host-file
redireciona o arquivo para a entrada padrão do comando. >encodedfile
redireciona a saída do comando para o arquivo.
Como funciona o redirecionamento de shell abaixo? Parece complicado entender a ordem de execução. Alguma explicação fácil?
uuencode host-file < host-file >encodedfile
uuencode
é o comando. host-file
é seu argumento. < host-file
redireciona o arquivo para a entrada padrão do comando. >encodedfile
redireciona a saída do comando para o arquivo.
Quando um programa de console é iniciado, ele abre três descritores de arquivo padrão:
0 STDIN
1 STDOUT
2 STDERR
Normalmente, o filehandle STDIN lê a partir da entrada do terminal (ou seja, o teclado). Mas quando o redirecionamento <
é usado, a entrada é lida a partir desse arquivo. Da mesma forma, STDOUT geralmente grava no terminal, mas quando >
é usado, a saída é gravada nesse arquivo.
STDERR também pode ser redirecionado usando 2>
. Você também pode ver o STDERR sendo redirecionado para o mesmo local que STDOUT usando 2>&1
.
uuencode host-file < host-file >encodedfile
Vamos dividir isso em 4 partes:
uuencode
é o nome do comando a ser executado. O shell pesquisa a variável de ambiente PATH ($ PATH) e procura um arquivo executável denominado uuencode
em cada diretório no PATH. Em uma instalação padrão, isso será /usr/bin/uuencode
. O programa uuencode pega um arquivo binário e transforma-o em texto em um formato especial para que ele possa ser enviado por uma rede que não pode manipular caracteres não ascii. host-file
é o argumento da linha de comando para uuencode
. O comando uuencode
precisa de um argumento para poder colocar o nome do arquivo na versão codificada. A primeira linha do arquivo codificado será algo parecido com isto:
%código%
begin 644 host-file
é o shell que usa um arquivo chamado < host-file
como entrada padrão (stdin) para o processo host-file
. Então, quando uuencode
lê alguns bytes de entrada, em vez de vir do seu teclado, eles vêm desse arquivo. uuencode
é o shell que usa um arquivo chamado >encodefile
como saída padrão (stdout). Assim, quando encodedfile
escreve alguma saída, em vez de ir para a tela, ela vai para esse arquivo. Não há realmente uma ordem de execução, pois apenas um comando, uuencode
, está sendo executado. Se você quiser detalhes técnicos, continue a ler.
Nos bastidores, o shell chama uuencode
, em seguida, o processo filho abre o arquivo fork()
para leitura, abre o arquivo host-file
para gravação e chama encodedfile
, que substitui o processo filho (uma cópia do processo shell) com o processo exec()
. O processo filho torna-se uuencode
, com o descritor de arquivo de entrada (uma maneira que o sistema operacional controla os arquivos abertos) definido como uuencode
e o descritor do arquivo de saída definido como host-file
.
Tags bash