Lo spazio bianco è collassato con l'eco >>


10

Sto creando uno script che legge il contenuto di un file, manipola il contenuto e lo aggiunge a un altro file (in particolare il file degli host virtuali). La formattazione e lo spazio bianco nel file di output sono importanti ma quando scrivo il contenuto, lo spazio bianco viene rimosso.

VHOST_PATH="/etc/apache2/extra/httpd-vhosts.conf"
TEMPLATE_PATH="./template.conf"
TEMPLATE=$(<TEMPLATE_PATH)
# manipulating $TEMPLATE
echo $TEMPLATE                   #outputs correct whitespace
echo $TEMPLATE >> $VHOST_PATH    #does not output correct whitespace

Quindi la prima eco produce qualcosa di simile

<VirtualHost *:80>
    ServerAdmin webmaster@domain
    DocumentRoot "root/web"
    ServerName domain
    ErrorLog "root/logs/error_log"
</VirtualHost>

ma la stringa che entra nel file è

<VirtualHost *:80> ServerAdmin webmaster@domain DocumentRoot "root/web" ServerName domain ErrorLog "root/logs/error_log" </VirtualHost>

Come preservare lo spazio bianco durante l'aggiunta nel file di destinazione? Ho cercato questo, ma tutte le domande simili non si applicano alla mia sceneggiatura senza riscriverla.

Risposte:


9

Come ogni altro programma, l'eco interpreta le stringhe separate da spazi bianchi come argomenti diversi.

Dopo aver chiamato

echo foo    bar

l'unico dato che viene passato alla eco dalla shell è che il primo argomento è fooe il secondo è bar.

Per passare un'intera stringa contenente spazi bianchi come singolo argomento, racchiuderla tra virgolette doppie:

echo "foo    bar"

stamperà tutti e quattro gli spazi.


Una nota a margine: trovo sorprendente che echo $TEMPLATEfunzioni. Dovrebbe anche comprimere più spazi bianchi.
Dennis,

Sì! Questo è stato. Ha perfettamente senso, ma non mi rendevo conto che fosse così. Inoltre, echo $TEMPLATEfunzionava perché avevo delle citazioni, ma ho trascurato di copiarlo sul mio post. Non pensavo che fosse importante. Mi sbagliavo!
Jeff,

1
@Jeff Vedi quanto segue: Comandi e argomenti
slhck

1
@Jeff, è di fondamentale importanza, quando si cerca assistenza, tagliare e incollare invece di riscrivere.
Glenn Jackman,

@glennjackman pensavo di poter scappare con la riscrittura poiché gli script erano così brevi e copia + incolla sarebbe stato un dolore dato che stavo lavorando in un terminale. Mi sbagliavo. lezione appresa. grazie per il consiglio.
Jeff,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.