Come posso scrivere più righe in un file chiamato 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;
Come posso scrivere più righe in un file chiamato 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;
Risposte:
La sintassi ( <<<
) e il comando utilizzato ( echo
) sono errati.
Corretto sarebbe:
#!/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
Questa costruzione viene definita documento Here e può essere trovata nelle pagine man di Bash man --pager='less -p "\s*Here Documents"' bash
.
EOF
, altrimenti non verrà riconosciuto e ti imbatterai in una fine imprevista dell'errore del file .
Se non si desidera sostituire le variabili, è necessario racchiudere EOL tra virgolette singole.
cat >/tmp/myconfig.conf <<'EOL'
line 1, ${kernel}
line 2,
line 3, ${distro}
line 4 line
...
EOL
Esempio precedente:
$ cat /tmp/myconfig.conf
line 1, ${kernel}
line 2,
line 3, ${distro}
line 4 line
...
Le soluzioni ereditarie sono sicuramente il modo più comune per farlo. Altre soluzioni comuni sono:
echo 'line 1,' "$ {kernel}" ' linea 2, riga 3, '"$ {distro}"' riga 4 '> /etc/myconfig.conf
e
exec 3> & 1 # Salva lo stdout corrente exec> /etc/myconfig.conf echo line 1, $ {kernel} linea di eco 2, linea di eco 3, $ {distro} ... exec 1> & 3 # Ripristina stdout
printf
che introduce ancora alcune varianti più interessanti.
Il meccanismo seguente aiuta a reindirizzare più righe su file. Mantieni la stringa completa in "
modo da poter reindirizzare i valori della variabile.
#!/bin/bash
kernel="2.6.39"
echo "line 1, ${kernel}
line 2," > a.txt
echo 'line 2, ${kernel}
line 2,' > b.txt
Il contenuto di a.txt
è
line 1, 2.6.39
line 2,
Il contenuto di b.txt
è
line 2, ${kernel}
line 2,