2012-11-29 10 views
35

Come posso, in uno script di shell, creare un file chiamato foo.conf e renderlo contengono:Creare file con contenuti di script di shell

NameVirtualHost 127.0.0.1 

# Default 
<VirtualHost 127.0.0.1> 
ServerName localhost 
DocumentRoot "C:/wamp/www" 
</VirtualHost> 

risposta

69

usare un "here document":

cat > foo.conf << EOF 
NameVirtualHost 127.0.0.1 

# Default 
<VirtualHost 127.0.0.1> 
ServerName localhost 
DocumentRoot "C:/wamp/www" 
</VirtualHost> 
EOF 
+0

cosa fa il << fare? –

+2

@BrianBolton Questo dice che seguirà un "documento qui". – ams

+0

@ams Si possono avere variabili che vengono interpretate all'interno del documento? –

11

potete farlo con echo:

echo 'NameVirtualHost 127.0.0.1 

# Default 
<VirtualHost 127.0.0.1> 
ServerName localhost 
DocumentRoot "C:/wamp/www" 
</VirtualHost>' > foo.conf 

Tutto racchiuso tra virgolette singole vengono interpretati come letterali, s o scrivi quel blocco in un file chiamato foo.conf. Se non esiste, verrà creato. Se esiste, verrà sovrascritto.

+3

Funziona, ma è limitato dalla lunghezza massima della riga di comando. – ams

+3

Funziona anche fino a quando non si dispone di apostrofi nel documento. – mornfall

5

un heredoc potrebbe essere il modo più semplice:

cat <<END >foo.conf 
NameVirtualHost 127.0.0.1 

# Default 
<VirtualHost 127.0.0.1> 
ServerName localhost 
DocumentRoot "C:/wamp/www" 
</VirtualHost> 
END 
4

Questo codice montato meglio per me:

sudo dd of=foo.conf << EOF 
<VirtualHost *:80> 
    ServerName localhost 
    DocumentRoot /var/www/localhost 
</VirtualHost> 
EOF 

E 'stato l'unico che ho potuto utilizzare con sudo fuori dalla scatola!

Problemi correlati