2011-09-25 1 views
6

Come parte di uno script di build di sistema, ho uno script che crea vari file e configurazioni.Script BASH per passare variabili senza sostituzione in un nuovo script

Tuttavia, una parte dello script di generazione crea un nuovo script che contiene variabili che non desidero risolvere quando viene eseguito lo script di generazione. Frammento di codice esempio

cat - > /etc/profile.d/mymotd.sh <<EOF 
hostname=`uname -n` 
echo -e "Hostname is $hostname" 
EOF 

Ho provato tutte le combinazioni possibili di 'e "e (e [ma non riesco a ottenere lo script per inviare il contenuto senza sostituendo i valori e ponendo i sostituti del nuovo script, piuttosto che il testo originale.

Idee?

risposta

9

più semplice è quello di sfuggire al $

echo -e "Nome host è \ $ hostname"

23

Il metodo più semplice, a patto che non si desidera qualcosa da sostituire nel qui doc, è quello di mettere l'indicatore EOF tra virgolette, in questo modo:

cat - > /etc/profile.d/mymotd.sh <<'EOF' 
hostname=`uname -n` 
echo -e "Hostname is $hostname" 
EOF 
+0

Perfecto. Ha funzionato. Grazie. – interoperate

+1

Dovrebbe essere accettata risposta, grazie – David