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?
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?
Respostas:
Ele redireciona o stdout do programa antes >>
e o anexa ao arquivo fornecido depois.
>> file command
echo a b >> c d
seria anexado a b d
a um arquivo chamado c
.
>>
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 command
seria anexada a filename
.
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 echo
sã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 foo
e pressiona Enter, foo\n
é a saída real do echo
comando, que é mostrada pelo seu shell, foo
seguida 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.
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>&1
faz isso. Para mais informações sobre redirecionamento e mais alguns exemplos, você pode ler este pequeno tutorial .
Geralmente, você pode tentar o explanshell.com , que fornecerá orientações visuais e informações sobre um comando shell específico.
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
echo Dino > flintstones.txt
para mostrar que o conteúdo seria simplesmente Dino
se feito com uma única seta à direita.
Novamente, se você fizer
> somefile.txt
Todo o conteúdo do arquivo será limpo.
> file
limpa o arquivo, mas >> file
não faz nada.
man bash
escrito com uma linguagem bastante formal, pode ser difícil de entender. Por outro lado, a frasebash >>
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.