O que significa 'no comando do terminal?

11

Eu me deparei com um comando agora dado abaixo -

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

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

    
por monster 28.06.2018 / 14:01

4 respostas

31

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

    
por 28.06.2018 / 14:06
48

Resposta curta - o que faz >> ?

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

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

command >> filename

Assim, a saída de command seria anexada a filename .

O que acontece no caso específico de echo ?

No seu caso específico, o comando echo "…" envia seus argumentos de entrada para "stdout", que é o chamado "descritor de saída padrão". Os argumentos de entrada para echo são seguidos por uma nova linha ( \n ), para que você receba 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 foo e pressiona Enter, foo\n é a saída real do comando echo , que é mostrado pelo seu shell como foo seguido por uma nova linha.)

Basicamente tudo o que escreve na sua linha de comando está usando stdout. Existe também outro descritor chamado “stderr” que é normalmente usado para mensagens de erro. Ele também será impresso como stdout, então, às vezes, eles poderiam ser intercalados. E há um descritor stdin que é usado para entrada. Consulte este artigo para obter 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 desses 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 ser gravado. O arquivo será então sobrescrito com stdout.

  • >> é anexado a um descritor de arquivo. Cria o arquivo se não existir.

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

Como posso descobrir o que uma determinada parte do código da shell significa?

Geralmente, você pode tentar explicahell.com , que lhe dará orientação visual e informações sobre um determinado comando shell.

    
por 28.06.2018 / 16:13
7

Para os TLDR pessoas que só gostam de ver um exemplo;

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

Então, se o arquivo "flintstones.txt" contiver;

Fred
Barney

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

Fred
Barney
Dino
    
por 29.06.2018 / 11:58
-2

Novamente, se você fizer

> somefile.txt

Todo o conteúdo do arquivo será apagado.

    
por 30.06.2018 / 17:01