Como você se lembra da sintaxe para o redirecionamento 2> & 1 [fechado]


12

Você tem um sistema ou mnemônico? Isso me incomoda há anos, eu sempre tenho que procurar

Respostas:


19

Se você é um programador C, pode pensar &1em "o endereço 1", para 2>&1ler "redirecionar o descritor de arquivo nº 2 para o mesmo local que nº 1".


Não sei se ajuda ... Mnemônicos são coisas bastante pessoais.
lgeorget

+12 Essa também é uma descrição correta do que está acontecendo.
Stéphane Chazelas

1
Gostaria de saber se foi assim que foi pensado ("o endereço de 1") quando foi inventado. Como algumas pessoas contribuíram fortemente para tanto a linguagem C e UNIX quando eles foram inventados, é possível
lgeorget

1
Eu poderia começar a usar esta vez;)
Goldilocks

3

"Dois para um" ("para" ser >) faz mais sentido lógico para mim do que "Dois para um", que é o que eu normalmente confunda. Se você considerar "e um" como um único substantivo (um local), também fará sentido gramatical no contexto, o que é mais difícil de fazer com "Dois e um" - você teria que considerar "um" em um único substantivo, e ainda não faria sentido contextual.


2
Eu não entendo #
18714 Matt

2

Não é um mnemônico, mas li o seguinte:

0é stdin. 1é stdout. 2é stderr. >Está em. <está fora de. &é um descritor de arquivo (em alguns shells).

2>&1
2      >    &               1
stderr into file descriptor 1

redirect stderr into stdout

Pode mudar se você tiver mexido com qualquer um dos descritores de arquivo antes do redirecionamento ...

2>somefile 1>&2
2      >    somefile     1      >    &2
stderr into somefile and stdout into file descriptor 2

redirect stderr into somefile and stdout into somefile. 

2

Quando você escreve 2>&1, está dizendo "o erro padrão vai para a saída padrão".

Vamos quebrar isso.

Primeiro, você deseja memorizar que o erro padrão é 2e a saída padrão é 1.

Então você tem 2algo, alguma coisa 1.

"vai para" está escrito >.

Então você tem 2>algo 1.

2>filenamesignifica enviar erro padrão para filename. Mas você não deseja enviá-lo para um arquivo chamado 1. Você quer outra coisa: o número de um arquivo que já está aberto. É para isso que &serve.

Então 2>&1.

Você também pode pensar nisso como se estivesse fazendo uma tarefa, onde o >é como um igual e o &é como um $, compare:

f=$1
2>&1

Para entender uma linha de comando com vários redirecionamentos, o importante é saber que os redirecionamentos são feitos da esquerda para a direita. Consulte Ordem dos redirecionamentos para obter mais detalhes sobre isso.


0

Lembrei que é sempre 2 -> 1. Stderr para stdout.

A parte do meio é sempre a mais difícil e eu sempre errei, até que lembrei que primeiro vem o personagem afiado >, depois o personagem que não posso escrever na vida real &.

Então nunca 2&>1, sempre2>&1


0

Se você entender que FD2 é STDERR, pense: "Ah, e capture STDERR onde quer que eu envie STDOUT (FD1)".


0

Meus colegas de trabalho e eu normalmente dizemos "dois é maior que um", porque a maioria de nós nem sempre se lembra que stderré o descritor de arquivos 2e stdouté 1(especialmente os novos no unix / linux), então as outras mnemônicas sobre redirecionamento stderrnão funcionam realmente . O único problema é que você ainda precisa se lembrar para onde vai o e comercial!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.