A opção --status-fd
diz a dpkg
para relatar o progresso de uma maneira que outros programas podem analisar, por exemplo, para apresentar relatórios de progresso para o usuário em uma GUI.
O argumento para --status-fd
é um descritor de arquivo , ou seja, um número que designa um arquivo aberto. Simplificando as coisas um pouco:
- Quando um processo abre um arquivo pela primeira vez, esse arquivo recebe o descritor número 0. Na próxima vez, o arquivo recebe o descritor número 1 e assim por diante. A chamada do sistema
open
retorna o descritor de arquivo. - Quando o processo deseja realizar uma operação no arquivo, como ler ou gravar a partir dele, ele designa o arquivo pelo seu descritor, por exemplo,
read(0, addr, 10)
significa “leia 10 bytes do descritor 0 e coloque-os no endereço de memóriaaddr
”. - Cada processo tem seus próprios descritores de arquivo: o descritor de arquivo n no processo p não tem relação com o descritor de arquivo n no processo q .
- Os processos herdam os descritores de arquivos de seus pais quando são criados.
- Por convenção, os processos são executados com os descritores de arquivo 0, 1 e 2 já abertos. 0 deve ser usado para entrada, 1 para saída normal e 2 para mensagens de erro.
Redirection abre um arquivo em um descritor específico. Por exemplo, em um shell script ou na linha de comando, mycommand <somefile
conecta o descritor de arquivo número 0 (entrada padrão) assim somefile
(que é aberto para leitura) em vez do que era antes (o terminal, se o comando for executado em um terminal). Você pode preceder um número de descritor ao operador de redirecionamento: mycommand 3<somefile
conecta o descritor de arquivo número 3 a somefile
(a maioria dos comandos não faz nada com esse descritor de arquivo).
Quando o dpkg está instalando, atualizando ou removendo pacotes, ele executa vários outros comandos nos scripts de pré / pós instalação / remoção dos pacotes. Alguns desses comandos podem ler mensagens de entrada ou de exibição, portanto, o dpkg mantém os descritores padrão conectados ao que quer que eles estivessem conectados quando foi invocado.
Como os descritores de arquivo padrão já foram obtidos, dpkg
permite que o chamador especifique um diferente para os relatórios de status. Você poderia colocar os relatórios de status em um arquivo, por exemplo:
dpkg --status-fd 3 -i somefile.deb 3>/tmp/dpkg.status
Em outro terminal, execute tail -n +1 -f /tmp/dpkg.status
e observe as mensagens de status chegando.
Geralmente, o front-end que chama dpkg
e deseja relatórios de status abre um canal (um canal de comunicação unidirecional ) antes de executar dpkg
e passar o descritor de arquivo para gravar o final do pipe como o argumento de --status-fd
. O front-end então lê a partir da extremidade de leitura do pipe e recebe mensagens de status à medida que são produzidas, sem arriscar que elas se misturem a qualquer outra coisa.