Descritor de Ficheiros do Script da Shell

Intro

Às vezes vemos comandos como este na shell:

  • $ ls foo > /dev/null 2>&1

Pode ser difícil compreender o que isto está a fazer pela primeira vez, por isso esta nota irá explicá-lo brevemente.

>

I/O Redirecção

Se tiver agora um ficheiro de texto simples:

>

>>

>

>

Aarquivo de texto simples.

Agora redirecione o conteúdo deste arquivo para outro local:

>

>

>

>>22966082>Redirecionar o conteúdo do arquivo.

Na ação de redirecionamento acima, não vemos nenhuma saída exibida no terminal, porque o comando > redireciona o conteúdo do arquivo test.txt paraoutput.txt, que é uma saída padrão (stdout).

Em contraste com a saída padrão, existe erro padrão (stdr), por exemplo

Ocorreu um erro durante6082>Ocorreu um erro durante o processo de redirecionamento.

Ocorreu um erro durante o processo de redirecionamento porque não há nenhum arquivo com o nome no_such_file.txt no diretório atual. Neste caso, embora o comando > seja usado, não é possível inserir o conteúdo no output.txt, pois não há conteúdo stdout, mas sim uma mensagem de erro de stderror.

Descritor de ficheiro

Descritor de ficheiro pode ser pensado como um inteiro positivo para um ficheiro aberto. Se você tem 100 arquivos abertos, você tem basicamente 100 descritores de arquivo correspondentes.

Em sistemas do tipo Unix/Unix, há também descritores de arquivo dedicados a stdout e stderr, que, para ser claro, têm destinos dedicados para a saída destespara estes destinos de saída:

  • 1: para stdout
  • 2: para stderr

Pondo tudo junto

De acordo com o conceito acima, se você quiser escrever o conteúdo de um arquivo conhecido para outro arquivo, você pode fazer isso

>

>

Conteúdo de ficheiro redireccionado para outro local viastdout.

O 1 deste lado representa stdout, cuja sintaxe é representada como:

  • >

Então, quando você vê alguém escrever de.foo > a.bar, é só omitir o

Likewise, para redireccionar a stderr você pode fazer isto:

Mensagem de erro redireccional para outro local via stderr.

Se quiser redireccionar tanto stdout como stderr para o mesmo destino, pode fazer isto

>

>

Redirect stderr para o mesmo local com stdout.
  • &1 é usado como referência a um descritor de arquivo id de 1, ou seja, uma referência a stdout.
  • 2>&1 significa redirecionar o conteúdo da stderr para stdout.

Resumo

  • Existem normalmente dois destinos para a saída: stdout e stderr.
  • Podemos direcionar a saída para lugares diferentes, mas normalmente para um arquivo.
  • Descritor de ficheiro pode ser usado para distinguir entre stdout (1) e stderr (2).
  • command > output_location é na verdade uma abreviatura de comando 1> output_location.
  • Podemos usar & para consultar outros descritores de ficheiro.

Deixe uma resposta

O seu endereço de email não será publicado.