Qual é o nome desse operador? Eu gostaria de encontrar um manual sobre isso.
Vlad T.
96
o operador redireciona a saída para um arquivo substituindo o arquivo, se houver. O >> será anexado a um arquivo existente.
Triton Man
4
Obrigado, aqui está o link para a página de wiki, em precisa de alguém caso en.wikipedia.org/wiki/...
Vlad T.
11
Se você precisar fazer isso com privilégios de root, faça o seguinte:sudo sh -c 'echo "some data for the file" >> fileName'
lukaserat
1
E se o meu texto é algo como este e por qualquer razão, não posso usar curlou wget?
asedsami
145
#!/bin/sh
FILE="/path/to/file"/bin/cat <<EOM >$FILE
text1
text2 # This comment will be inside of the file.The keyword EOM can be any text, but it must start the line and be alone.
EOM # This will be also inside of the file, see the space in front of EOM.
EOM # No comments and spaces around here, or it will not work.
text4
EOM
Uma explicação do seu código ajudaria muito a torná-lo mais utilizável para outras pessoas. Mesmo frases de vocabulário como "aqui documentam" e "redirecionamento" podem direcionar os pesquisadores para outros recursos.
Palpatim
2
A explicação não é tão necessária para algo assim.
Bhargav Nanekalva 17/08/2015
6
A explicação nunca é necessária quando você já sabe a resposta. Para mim, o código acima não é útil devido à falta de detalhes.
Sei que essa é uma pergunta muito antiga, mas como o OP trata de scripts, e pelo fato de o google me trazer aqui, também devem ser mencionados os descritores de arquivos para leitura e gravação ao mesmo tempo.
#!/bin/bash# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt
# Let's print some text to fd 3
echo "Roses are red">&3
echo "Violets are blue">&3
echo "Poems are cute">&3
echo "And so are you">&3# Close fd 3
exec 3>&-
Então cato arquivo no terminal
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
Este exemplo faz com que o arquivo poem.txt seja aberto para leitura e gravação no descritor de arquivo 3. Ele também mostra que as caixas * nix conhecem mais fd's do que apenas stdin, stdout e stderr (fd 0,1,2). Na verdade, vale muito. Normalmente, o número máximo de descritores de arquivos que o kernel pode alocar pode ser encontrado /proc/sys/file-maxou /proc/sys/fs/file-maxmas usar qualquer fd acima de 9 é perigoso, pois pode entrar em conflito com os fd usados pelo shell internamente. Portanto, não se incomode e use apenas os 0-9 dos fd. Se você precisar mais dos 9 descritores de arquivo em um script bash, use um idioma diferente de qualquer maneira :)
De qualquer forma, os fd's podem ser usados de várias maneiras interessantes.
Você pode evitar executar um shell raiz apenas para imprimir uma sequência. Tente echo "some data for the file" | sudo tee -a fileName >/dev/nullexecutar apenas teecomo root.
Tripleee 3/07
6
Para ambientes em que os documentos aqui não estão disponíveis ( Makefile, Dockerfileetc), você pode frequentemente usar printfuma solução razoavelmente legível e eficiente.
printf '%s\n''#!/bin/sh''# Second line' \
'# Third line' \
'# Conveniently mix single and double quotes, too' \
"# Generated $(date)" \
'# ^ the date command executes when the file is generated' \
'for file in *; do' \
' echo "Found $file"' \
'done'>outputfile
Seu comentário acima Tente eco "alguns dados para o arquivo" | sudo tee -a fileName> / dev / null para executar apenas tee como root. foi realmente útil!
26719 Kojo
5
Eu pensei que havia algumas respostas perfeitamente boas, mas nenhum resumo conciso de todas as possibilidades; portanto:
O principal principal por trás da maioria das respostas aqui é o redirecionamento . Dois são importantes operadores de redirecionamento para gravar em arquivos:
Redirecionando a saída:
echo 'text to completely overwrite contents of myfile' > myfile
Anexando saída redirecionada
echo 'text to add to end of myfile' >> myfile
Aqui Documentos
Outros mencionados, e não de uma fonte de entrada fixa como echo 'text', você também pode gravar de maneira interativa em arquivos através de um "Aqui Documento", que também é detalhado no link para o manual do bash acima. Essas respostas, por exemplo
cat > FILE.txt <<EOF ou cat >> FILE.txt <<EOF
faça uso dos mesmos operadores de redirecionamento, mas adicione outra camada via "Here Documents". Na sintaxe acima, você escreve no FILE.txt através da saída de cat. A gravação ocorre somente após a entrada interativa receber uma sequência específica, neste caso 'EOF', mas pode ser qualquer sequência, por exemplo:
cat > FILE.txt <<'StopEverything' ou cat >> FILE.txt <<'StopEverything'
funcionaria tão bem. Aqui, os Documentos também procuram vários delimitadores e outros caracteres de análise interessantes; consulte os documentos para obter mais informações sobre isso.
Here Strings
Um pouco complicado e mais um exercício para entender o redirecionamento e a sintaxe do Here Documents, mas você pode combinar a sintaxe do estilo Here Document com os operadores de redirecionamento padrão para se tornar uma String Here:
Redirecionando a saída da entrada do gato
cat > myfile <<<'text to completely overwrite contents of myfile'
Anexando saída redirecionada da entrada cat
cat >> myfile <<<'text to completely overwrite contents of myfile'
sudo sh -c 'echo "some data for the file" >> fileName'
curl
ouwget
?fonte
Você pode redirecionar a saída de um comando para um arquivo:
ou anexar a ele
Se você deseja escrever diretamente, o comando é
echo 'text'
fonte
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(graças ao comentário de lukaserat acima) #fonte
cat > FILE.txt
pressionar Ctrl + D quando terminar .Sei que essa é uma pergunta muito antiga, mas como o OP trata de scripts, e pelo fato de o google me trazer aqui, também devem ser mencionados os descritores de arquivos para leitura e gravação ao mesmo tempo.
Então
cat
o arquivo no terminalEste exemplo faz com que o arquivo poem.txt seja aberto para leitura e gravação no descritor de arquivo 3. Ele também mostra que as caixas * nix conhecem mais fd's do que apenas stdin, stdout e stderr (fd 0,1,2). Na verdade, vale muito. Normalmente, o número máximo de descritores de arquivos que o kernel pode alocar pode ser encontrado
/proc/sys/file-max
ou/proc/sys/fs/file-max
mas usar qualquer fd acima de 9 é perigoso, pois pode entrar em conflito com os fd usados pelo shell internamente. Portanto, não se incomode e use apenas os 0-9 dos fd. Se você precisar mais dos 9 descritores de arquivo em um script bash, use um idioma diferente de qualquer maneira :)De qualquer forma, os fd's podem ser usados de várias maneiras interessantes.
fonte
Eu gosto desta resposta:
mas sugiro
cat >> FILE.txt << EOF
que você queira adicionar algo ao final do arquivo sem apagar o que já existeComo isso:
fonte
Movendo meu comentário como resposta, conforme solicitado por @lycono
Se você precisar fazer isso com privilégios de root, faça o seguinte:
fonte
echo "some data for the file" | sudo tee -a fileName >/dev/null
executar apenastee
como root.Para ambientes em que os documentos aqui não estão disponíveis (
Makefile
,Dockerfile
etc), você pode frequentemente usarprintf
uma solução razoavelmente legível e eficiente.fonte
Eu pensei que havia algumas respostas perfeitamente boas, mas nenhum resumo conciso de todas as possibilidades; portanto:
O principal principal por trás da maioria das respostas aqui é o redirecionamento . Dois são importantes operadores de redirecionamento para gravar em arquivos:
Redirecionando a saída:
echo 'text to completely overwrite contents of myfile' > myfile
Anexando saída redirecionada
echo 'text to add to end of myfile' >> myfile
Aqui Documentos
Outros mencionados, e não de uma fonte de entrada fixa como
echo 'text'
, você também pode gravar de maneira interativa em arquivos através de um "Aqui Documento", que também é detalhado no link para o manual do bash acima. Essas respostas, por exemplocat > FILE.txt <<EOF
oucat >> FILE.txt <<EOF
faça uso dos mesmos operadores de redirecionamento, mas adicione outra camada via "Here Documents". Na sintaxe acima, você escreve no FILE.txt através da saída de
cat
. A gravação ocorre somente após a entrada interativa receber uma sequência específica, neste caso 'EOF', mas pode ser qualquer sequência, por exemplo:cat > FILE.txt <<'StopEverything'
oucat >> FILE.txt <<'StopEverything'
funcionaria tão bem. Aqui, os Documentos também procuram vários delimitadores e outros caracteres de análise interessantes; consulte os documentos para obter mais informações sobre isso.
Here Strings
Um pouco complicado e mais um exercício para entender o redirecionamento e a sintaxe do Here Documents, mas você pode combinar a sintaxe do estilo Here Document com os operadores de redirecionamento padrão para se tornar uma String Here:
Redirecionando a saída da entrada do gato
Anexando saída redirecionada da entrada catcat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
fonte
Também pode usar aqui document e vi, o script abaixo gera um FILE.txt com 3 linhas e interpolação variável
O arquivo terá três linhas, como abaixo. "i" é iniciar o modo de inserção do vi e, da mesma forma, fechar o arquivo com Esc e ZZ.
fonte
esta é a minha resposta. $ cat arquivo> copy_file
fonte