English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Entrada do Shell/Redireção de Saída

A maioria dos comandos do sistema UNIX aceita entrada do terminal e envia o output de volta para o seu terminal. Um comando geralmente lê a entrada do local chamado entrada padrão, que, por padrão, é o seu terminal. Da mesma forma, um comando geralmente escreve a saída para o output padrão, que, por padrão, também é o seu terminal.

A lista de comandos de redirecionamento é a seguinte:

Comando Descrição
command > file Redirecione a saída para file.
command < file Redirecione a entrada para file.
command >> file Redirecione a saída para file de forma anexada.
n > file Redirecione o arquivo com o descritor de arquivo n para file.
n >> file Redirecione o arquivo com o descritor de arquivo n para file de forma anexada.
n >& m Combine os arquivos de saída m e n.
n <& m Combine os arquivos de entrada m e n.
<< tag Use o conteúdo entre as marcas de início tag e a marca de fim tag como entrada.

É importante notar que o descritor de arquivo 0 é geralmente a entrada padrão (STDIN),1 É a saída padrão (STDOUT),2 É a saída de erro padrão (STDERR).

Redireção de Saída

A redireção geralmente é realizada inserindo símbolos específicos entre os comandos. Em particular, a sintaxe desses símbolos é mostrada a seguir:

comando1 > file1

Este comando executa command1Em seguida, salve o conteúdo da saída no arquivo file1.

Atenção para qualquer file1O conteúdo existente dentro será substituído pelo novo conteúdo. Se você desejar adicionar o novo conteúdo no final do arquivo, use o operador >>.

Exemplo Online

Execute o comando who a seguir, que redirecionará o comando completo para o arquivo de usuário (users):

$ who > users

Após a execução, não há informações sendo exibidas no terminal, pois a saída foi redirecionada para o dispositivo padrão de saída (terminal) especificado.

Você pode usar o comando cat para visualizar o conteúdo do arquivo:

$ cat users
_mbsetupuser console  Out 31 17:35 
tianqixin          console  Out 31 17:35 
tianqixin          ttys000  Dez  1 11:33

A redireção de saída substituirá o conteúdo do arquivo, veja o exemplo a seguir:

$ echo "Base Tutorial: pt.oldtoolbag.com" > users
$ cat users
Base Tutorial: pt.oldtoolbag.com
$

Se você não deseja que o conteúdo do arquivo seja substituído, você pode usar >> para anexar ao final do arquivo, por exemplo:

$ echo "Base Tutorial: pt.oldtoolbag.com" >> users
$ cat users
Base Tutorial: pt.oldtoolbag.com
Base Tutorial: pt.oldtoolbag.com
$

Redireção de Entrada

Da mesma forma que a redireção de saída, os comandos Unix também podem obter entrada de arquivos, com a sintaxe:

comando1 < file1

Dessa forma, o comando que originalmente precisaria de entrada do teclado será transferido para a leitura de conteúdo do arquivo.

Atenção: a redireção de saída é indicada pelo sinal de maior (>), enquanto a redireção de entrada é indicada pelo sinal de menor (<).

Exemplo Online

Continuando com o exemplo acima, para contar o número de linhas no arquivo users, execute o seguinte comando:

$ wc -l users
       2 users

Também pode redirecionar entrada para o arquivo users:

$ wc -l < users
       2

Atenção: os resultados dos dois exemplos acima são diferentes: no primeiro exemplo, o nome do arquivo é exibido; no segundo, não é, porque ele sabe apenas que lê conteúdo do entrada padrão.

comando1 < infile > outfile

Substitui entrada e saída, executando o comando1lê conteúdo do arquivo infile e escreve a saída para outfile.

Explicação detalhada de redirecionamento

Geralmente, cada Unix/Os comandos do Linux sempre abrem três arquivos durante a execução:

  • Arquivo de entrada padrão (stdin): o descritor de arquivo do stdin é 0, e os programas Unix lêem dados do stdin pelo padrão.

  • Arquivo de saída padrão (stdout): o descritor de arquivo do stdout é1programas Unix输出的默认数据到stdout.

  • Arquivo de erro padrão (stderr): o descritor de arquivo do stderr é2programas Unix escrevem informações de erro no fluxo stderr.

Pelo padrão, command > arquivo redireciona stdout para o arquivo, e command < arquivo redireciona stdin para o arquivo.

Se desejar redirecionar stderr para o arquivo, pode ser escrito assim:

$ command 2>arquivo

Se desejar que stderr seja anexado ao final do arquivo, pode ser escrito assim:

$ command 2>>arquivo

2 representa o arquivo de erro padrão (stderr).

Se desejar redirecionar stdout e stderr para um arquivo, pode ser escrito assim:

$ command > arquivo 2>&1
ou
$ command >> arquivo 2>&1

Se desejar redirecionar stdin e stdout, pode ser escrito assim:

$ command < arquivo1 >arquivo2

o comando 'command' redireciona stdin para o arquivo1redirecionar stdout para o arquivo2.

Here Document

Here Document é um tipo especial de redirecionamento de entrada no Shell, usado para redirecionar entrada para um script ou programa Shell interativo.

Sua forma básica é a seguinte:

comando << delimitador
    documento
delimitador

Sua função é passar o conteúdo (documento) entre dois delimitadores como entrada para o comando.

Atenção:

  • O delimiter no final deve estar alinhado à margem, sem nenhum caractere antes ou depois, incluindo espaços e tabulações de recuo.

  • Os espaços antes e depois do delimiter no início serão ignorados.

Exemplo Online

No comando de linha de comando, através do wc -O comando l calcula o número de linhas do Here Document:

$ wc -l << EOF
    Bem-vindo ao
    Site de Manual Básico
    pt.oldtoolbag.com
EOF
3          # Resultado de saída 3 linha
$

Também podemos usar Here Document em scripts, por exemplo:

#!/bin/bash
# autor:Site de Manual Básico
# url:pt.oldtoolbag.com
cat << EOF
Bem-vindo ao
Site de Manual Básico
pt.oldtoolbag.com
EOF

Execute o script acima, o resultado é:

Bem-vindo ao
Site de Manual Básico
pt.oldtoolbag.com

/dev/arquivo null

Se quiser executar um comando, mas não quiser exibir o resultado na tela, pode redirecionar a saída para /dev/null:

$ command > /dev/null

/dev/null é um arquivo especial, o conteúdo escrito nele será descartado; se tentar ler conteúdo do arquivo, nada será lido. Mas /dev/null arquivo é muito útil, redirecionar a saída do comando para ele terá o efeito de "proibir a saída".

Se quiser ocultar stdout e stderr, pode ser escrito assim:

$ command > /dev/null 2>&1

Atenção:0 é a entrada padrão (STDIN),1 É a saída padrão (STDOUT),2 É a saída de erro padrão (STDERR).

Aqui 2 e > Entre eles não pode haver espaços,2> Aqui é indicado o erro de saída.