O que significa `>>` no comando terminal?


14

Me deparei com um comando agora dado abaixo -

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

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


26
Apenas para que você saiba o que melhorar no futuro: man bashescrito com uma linguagem bastante formal, pode ser difícil de entender. Por outro lado, a frase bash >>retorna alguns links úteis no Google. É verdade que queremos agregar conhecimento sem depender do Google; por esse motivo, mesmo uma pergunta com resposta facilmente pesquisável pode ser adequada. No entanto, o fato de você não ter fornecido a resposta imediatamente (consulte Posso responder minha própria pergunta? ) Nem apontado para os recursos existentes (que você possivelmente precisa de ajuda para entender) indica falta de pesquisa.
Kamil Maciorowski

5
Para uma descrição pormenorizada dos operadores de redirecionamento de linha de comando, consulte unix.stackexchange.com/q/159513/85039
Sergiy Kolodyazhnyy

Respostas:


31

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


28
"program before" O que isso significa? Comando obviamente, mas redirecionamentos também pode ser escrito prefixado, ou seja>> file command
rexkogitans

Um exemplo. No Ubuntu 18.04, eu poderia digitar "apt search rust >> x" A parte "apt search rust" procura nos pacotes disponíveis o termo rust e os envia para o padrão (normalmente o terminal neste caso). No entanto, o ">> x" diz para redirecionar a saída para o final do arquivo "x". Se eu apenas quisesse substituir o arquivo, precisaria apenas de um único ">".
NomadMaker

@rexkogitans Mesmo no meio do comando, se você quiser deixar seu código confuso para ler. echo a b >> c dseria anexado a b da um arquivo chamado c.
kasperd

@kasperd Você também pode espalhar o redirecionamento stdin no meio de qualquer ordem, adicionalmente.
Rexkogitans

48

Resposta curta - o que >>faz?

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?

No 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 no seu shell quando você executa um comando. (Ou seja, quando você digita echo fooe pressiona Enter, foo\né a saída real do echocomando, que é mostrada pelo seu shell, fooseguida por uma nova linha.)

Basicamente, qualquer coisa que grava na sua linha de comando está usando stdout. Há também outro descritor chamado "stderr", que normalmente é usado para mensagens de erro. Também será impresso como stdout, portanto, às vezes, eles podem ser intercalados. E há um descritor stdin usado para entrada. Veja este artigo para mais informações.

Como você redireciona a saída no shell?

Você sempre pode redirecionar o 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, truncará o arquivo antes de gravá-lo. O arquivo será substituído por stdout.

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

Você também pode redirecionar o stderr usando 2>ou de 2>>maneira semelhante. Ou você pode combinar stderr e stdout em um arquivo: 2>&1faz 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 tentar o explanshell.com , que fornecerá orientações visuais e informações sobre um comando shell específico.


7

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

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

Portanto, se o arquivo "flintstones.txt" contiver;

Fred
Barney

echo Dino >> flintstones.txt resultará na adição de 'Dino' ao final do arquivo;

Fred
Barney
Dino

Eu recomendo que você adicione um exemplo de echo Dino > flintstones.txtpara mostrar que o conteúdo seria simplesmente Dinose feito com uma única seta à direita.
JakeGould #

-2

Novamente, se você fizer

> somefile.txt

Todo o conteúdo do arquivo será limpo.


Por que você está copiando outra resposta?
Toto

@Toto Eu não acho que ele faz. Parece ser adicional e muito valioso.
Volker Siegel

@Toto Oops! Olhando mais de perto, na verdade não é o caso. Errado, mesmo em vários aspectos. Estranho - ele é novo aqui, mas ativo em outros lugares -, provavelmente não apenas trollando.
Volker Siegel

2
@VolkerSiegel: > filelimpa o arquivo, mas >> filenão faz nada.
Toto

mas isso não responde a pergunta de qualquer maneira e deve ser um comentário
phuclv
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.