Respostas:
echo "some data for the file" >> fileName
sudo sh -c 'echo "some data for the file" >> fileName'
#!/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
Você pode redirecionar a saída de um comando para um arquivo:
$ cat file > copy_file
ou anexar a ele
$ cat file >> copy_file
Se você deseja escrever diretamente, o comando é echo 'text'
$ echo 'Hello World' > file
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(graças ao comentário de lukaserat acima) #
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
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.
#!/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 cat
o 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-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.
Eu gosto desta resposta:
cat > FILE.txt <<EOF
info code info
...
EOF
mas sugiro cat >> FILE.txt << EOF
que você queira adicionar algo ao final do arquivo sem apagar o que já existe
Como isso:
cat >> FILE.txt <<EOF
info code info
...
EOF
Movendo meu comentário como resposta, conforme solicitado por @lycono
Se você precisar fazer isso com privilégios de root, faça o seguinte:
sudo sh -c 'echo "some data for the file" >> fileName'
echo "some data for the file" | sudo tee -a fileName >/dev/null
executar apenas tee
como root.
Para ambientes em que os documentos aqui não estão disponíveis ( Makefile
, Dockerfile
etc), você pode frequentemente usar printf
uma 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
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:
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
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.
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 gatocat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
Também pode usar aqui document e vi, o script abaixo gera um FILE.txt com 3 linhas e interpolação variável
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
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.
#This is my var in text file
var = Test
#Thats end of text file