Pergunta sobre o operador de redirecionamento do Linux

2

Estou estudando para o meu LPIC-1 e estou confuso com o < > operador de redirecionamento. Eu sei que a definição oficial para isso é que "faz com que o arquivo especificado seja usado tanto para a entrada padrão quanto para a saída padrão" ... mas ainda estou confuso.

Alguém poderia fornecer um exemplo de como / quando eu usaria o < > operador de redirecionamento no Linux?

    
por Mike B 03.11.2009 / 04:11

2 respostas

4

Um exemplo seria quando você precisa fornecer dados de entrada de um programa e também enviar dados de saída em algum lugar (por exemplo, um arquivo):

$ sort < data.txt > result.txt

isso executa os dados em data.txt por meio do comando sort e envia a saída para result.txt . É idêntico a fazer isso:

$ sort data.txt > result.txt

Pense nisso assim:

(2 <- 1) -> 3

O arquivo do meio é alimentado no programa no número 2, e o resultado é finalmente enviado para 3.

    
por 03.11.2009 / 04:24
3

Se a resposta de John T fosse o que você queria, então você formulou erroneamente a seguinte pergunta:)

Ele descreveu sucintamente o < e > operadores, mas você perguntou sobre < & gt ;. Esse é um operador raramente usado, que não tenho certeza se esperaria ver no LPIC-1, mas apenas para registro (já que você provavelmente já fez esse exame):

Quando você executa interativamente um comando sem redirecionar sua entrada padrão, a saída e o erro normalmente serão anexados ao tty; lerá de stdin e escreverá para stdout / stderr. Embora você possa não esperar, esses descritores de arquivos normalmente são abertos para leitura e gravação. Tente executar um script como

#!/bin/bash
echo "I'm writing to stdin!" >&0

A execução deste nu irá funcionar, pelo menos nas versões atuais bash . No entanto, quando você usa o < e > redirecionadores, os descritores de arquivos stdin e stdout são abertos apenas para leitura e gravação, respectivamente, portanto, se você invocar isso com entrada redirecionada de um arquivo -

./write-to-stdin < /tmp/some-input

não funcionará (razoavelmente). Se você realmente deseja que um programa chamado com redirecionamento seja capaz de escrever e gravar em um único descritor de arquivo, < > fará o trabalho.

./read-and-write-stdin   <> /tmp/some-input-and-output
./read-and-write-stdout 1<> /tmp/some-input-and-output

Como a maioria dos programas espera apenas que stdin seja um descritor de leitura e stdout como um descritor de gravação, provavelmente é possível ver por que isso raramente é útil, mas se você estiver escrevendo scripts subordinados (ou usando funções), poderá aproveitar do comportamento você mesmo.

    
por 21.05.2011 / 02:59