O que significa `>>` no comando do terminal?

Jun 28 2018

Me deparei com um comando dado agora abaixo -

$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile

Pelo que posso imaginar, provavelmente é usado para confirmar as alterações em .bash_profile, mas para que exatamente é usado?

Respostas

31 kai-dj Jun 28 2018 at 12:06

Ele redireciona o stdout do programa antes >>e o anexa ao arquivo fornecido depois.

48 slhck Jun 28 2018 at 14:13

Resposta curta - o que >>fazer?

Com >>, você anexa a saída de um comando a um arquivo.

Seu comando de exemplo consiste em várias partes, basicamente:

comando >> nome do arquivo

Portanto, a saída de commandseria anexada a filename.


O que acontece no caso específico de echo?

Em seu caso específico, o echo "…"comando envia seus argumentos de entrada para “stdout”, que é o chamado “descritor de saída padrão”. Os argumentos de entrada para echosão seguidos por uma nova linha ( \n), para que você obtenha uma quebra de linha.

Aqui, um “descritor de saída padrão” nada mais é do que um fluxo de saída que é mostrado em seu shell quando você executa um comando. (Isto é, quando você digita echo fooe pressiona Enter, foo\né a saída real do echocomando, que é mostrada pelo seu shell fooseguido por uma nova linha.)

Basicamente, qualquer coisa que escreva em sua linha de comando está usando stdout. Também existe outro descritor chamado “stderr” que é normalmente usado para mensagens de erro. Ele também será impresso como stdout, então às vezes eles podem ser intercalados. E há um descritor stdin que é usado para entrada. Veja este artigo para mais informações.

Como você redireciona a saída no shell?

Você sempre pode redirecionar stdout para um descritor de arquivo, o que pode ser feito com um destes operadores:

  • >redireciona para um descritor de arquivo. Ele cria o arquivo se ele não existir ou, se já existir, trunca o arquivo antes de gravá-lo. O arquivo será, portanto, sobrescrito com stdout.

  • >>anexa a um descritor de arquivo. Ele cria o arquivo se ele não existir.

Você também pode redirecionar stderr usando 2>ou de 2>>maneira semelhante. Ou você pode combinar stderr e stdout em um arquivo: 2>&1faça isso. Para mais informações sobre redirecionamento e mais alguns exemplos, você pode ler este pequeno tutorial .

Como posso descobrir o que significa uma parte específica do código do shell?

Geralmente, você pode querer tentar explainshell.com , que lhe dará orientação visual e informações sobre um comando shell específico.

7 MarkBoyce Jun 29 2018 at 09:58

Para as pessoas do TLDR que apenas gostam de ver um exemplo;

A saída padrão (não erros) do comando antes de >> será adicionada ao final do arquivo com o seu nome.

Portanto, se o arquivo "flintstones.txt" contém;

Fred
Barney

echo Dino >> flintstones.txt resultará em 'Dino' sendo adicionado ao final do arquivo;

Fred
Barney
Dino