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 dseria anexado a b da 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 commandseria 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 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.
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 .
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.txtpara mostrar que o conteúdo seria simplesmente Dinose feito com uma única seta à direita.
Novamente, se você fizer
> somefile.txt
Todo o conteúdo do arquivo será limpo.
> filelimpa o arquivo, mas >> filenão faz nada.
man bashescrito 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.