shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script-pt] Descritores duplicados


From: Blau Araujo
Subject: Re: [shell-script-pt] Descritores duplicados
Date: Mon, 14 Mar 2022 09:17:29 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1

Salve!

No processo da duplicação de um descritor de arquivos, o dispositivo para o qual um descritor de arquivos X aponta é copiado para o descritor de arquivos Y.

```
Y>&X ou Y<&X
```

> Dica: pode facilitar muito ler a notação `&X` como "**para onde aponta X**".

Para que isso funcione, o apontamento do descritor de arquivos X tem que estar previamente definido, o que se dá no processamento (da esquerda para a direita) dos operadores de redirecionamento padrão em um comando ou na predefinição de um descritor customizado.

Observe:

```
~ $ ls -l /proc/self/fd > arquivo 2>&1
```

Neste exemplo, o shell processou o redirecionamento de FD1 (stdout) para `arquivo` e, em seguida, duplicou o apontamento de FD1 em FD2 (stderr). Isso quer dizer que tanto FD1 quanto FD2 redirecionarão seus fluxos de dados para `arquivo`, o que podemos comprovar lendo o seu conteúdo:

```
~ $ cat arquivo
total 0
lr-x------ 1 blau blau 64 mar 14 08:30 3 -> /proc/285844/fd
lrwx------ 1 blau blau 64 mar 14 08:30 0 -> /dev/pts/0
l-wx------ 1 blau blau 64 mar 14 08:30 1 -> /home/blau/arquivo
l-wx------ 1 blau blau 64 mar 14 08:30 2 -> /home/blau/arquivo
```

Repare que os descritores 1 e 2 eram links simbólicos para `/home/blau/arquivo` durante a execução do comando. Além disso, no Bash, nós temos o mesmo resultado com a notação `&>`:

```
~ $ ls -l /proc/self/fd &> arquivo
~ $ cat arquivo
total 0
lr-x------ 1 blau blau 64 mar 14 08:47 3 -> /proc/286130/fd
lrwx------ 1 blau blau 64 mar 14 08:47 0 -> /dev/pts/0
l-wx------ 1 blau blau 64 mar 14 08:47 1 -> /home/blau/arquivo
l-wx------ 1 blau blau 64 mar 14 08:47 2 -> /home/blau/arquivo
```

Por outro lado, se o experimento fosse realizado com a ordem inversa dos operadores, o resultado seria:

```
~ $ ls -l /proc/self/fd 2>&1 > arquivo
~ $ cat arquivo
total 0
lr-x------ 1 blau blau 64 mar 14 08:43 3 -> /proc/286076/fd
lrwx------ 1 blau blau 64 mar 14 08:43 0 -> /dev/pts/0
l-wx------ 1 blau blau 64 mar 14 08:43 1 -> /home/blau/arquivo
lrwx------ 1 blau blau 64 mar 14 08:43 2 -> /dev/pts/0
```

Como os operadores são processados da esquerda para a direita, no momento em que FD1 foi duplicado em FD2, FD1 apontava para sdtout (a tela do terminal), tendo sido redirecionado para `arquivo` apenas no momento seguinte.

Com descritores customizados, o apontamento do novo descritor está previamente definido para um arquivo, tornando indiferente a ordem:

```
~ $ exec 3> arquivo
~ $ ls -l /proc/self/fd 2>&3 >&3
~ $ cat arquivo
total 0
lr-x------ 1 blau blau 64 mar 14 08:55 4 -> /proc/286459/fd
lrwx------ 1 blau blau 64 mar 14 08:55 0 -> /dev/pts/0
l-wx------ 1 blau blau 64 mar 14 08:55 1 -> /home/blau/arquivo
l-wx------ 1 blau blau 64 mar 14 08:55 2 -> /home/blau/arquivo
l-wx------ 1 blau blau 64 mar 14 08:55 3 -> /home/blau/arquivo
```

Mas, observe o que escrevemos para utilizar o descritor customizado FD3:

```
`>&3`
```

Isso significa que a saída padrão (FD1) será copiada para onde aponta FD3, e foi exatamente isso que nós vimos no resultado do último comando: ou seja, houve uma duplicação do descritor de arquivos 3.

Espero que tenha ficado mais claro... ;-)


Abraços
Blau Araujo
-----------------------------
https://debxp.org
https://blauaraujo.com

Em 14/03/2022 03:36, Jamenson Espindula escreveu:
Saudações.

Eu já tentei entender, porém sinto muita dificuldade com o tal do
"descritor (de arquivo) duplicado".

Teria como alguém ensinar didaticamente como funciona? Exemplos didáticos?

Muito grato.

Jamenson Ferreira Espindula de Almeida Melo
Jaboatão dos Guararapes, Pernambuco, Brasil
Usuário GNU/Linux nº 166197
https://linuxcounter.net/cert/166197.png

Impressão digital da chave PGP:
234D 1914 4224 7C53 BD13  6855 2AE0 25C0 08A8 6180

_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: shell-script-pt@nongnu.org
Para se inscrever ou desinscrever acesse: 
https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse 
https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize 
somente esta.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]