Como escrever várias linhas em um arquivo chamado myconfig.conf
usando BASH?
#!/bin/bash
kernel="2.6.39";
distro="xyz";
echo <<< EOL
line 1, ${kernel}
line 2,
line 3, ${distro}
line 4
line ...
EOL >> /etc/myconfig.conf;
cat /etc/myconfig.conf;
A sintaxe ( <<<
) e o comando used ( echo
) estão incorretos.
Correto seria:
#!/bin/bash
kernel="2.6.39"
distro="xyz"
cat >/etc/myconfig.conf <<EOL
line 1, ${kernel}
line 2,
line 3, ${distro}
line 4 line
...
EOL
cat /etc/myconfig.conf
Essa construção é referida como um documento Here e pode ser encontrada nas páginas de manual do Bash em man --pager='less -p "\s*Here Documents"' bash
.
EOF
, caso contrário não será reconhecido e ocorrerá um erro inesperado no final do arquivo .isso faz o que você quer.
fonte
Se você não deseja que as variáveis sejam substituídas, você precisa cercar o EOL com aspas simples.
Exemplo anterior:
fonte
As soluções heredoc são certamente a maneira mais comum de fazer isso. Outras soluções comuns são:
e
fonte
printf
que introduz ainda mais variações interessantes.O mecanismo abaixo ajuda a redirecionar várias linhas para o arquivo. Mantenha a string completa em baixo
"
para que possamos redirecionar os valores da variável.O conteúdo de
a.txt
éO conteúdo de
b.txt
éfonte