2013-07-12 12 views
11

Sto lavorando su una Ubuntu 12.04 e sto scrivendo una shell di ambiente-auto-build. Nella shell ho bisogno di cambiare qualcosa in rc.local.Come aggiungere una linea in rc.local con shell

Questo è il mio rc.local ora.

#!/bin/sh -e 
#...... 

exit 0 

voglio modificarlo in questo modo:

#!/bin/sh -e 
#...... 

nohup sh /bocommjava/socket.sh & 

exit 0 

Ora uso nano di modificarlo, c'è qualche comando che può inserire la linea in rc.local?

+0

Avete considerato sollevare questa domanda su Ask Ubuntu come bene? –

+0

@wleoncio um ... buon consiglio. ma mi permettono di pubblicare la mia domanda su due siti? – missingcat92

+0

Immagino di sì, almeno non ho mai avuto problemi a farlo. ;) –

risposta

25

Usa Sed

per la prova

sed -e '$i \nohup sh /bocommjava/socket.sh &\n' rc.local 

Davvero Modificare

sed -i -e '$i \nohup sh /bocommjava/socket.sh &\n' rc.local 
+0

sì, questo comando funziona. Ma cosa significa $ intendo? Ho controllato molti articoli, non ho trovato la risposta. Grazie mille! – missingcat92

+4

$ dovrei essere diviso in '$' e 'i'. '$' significa l'ultima riga, 'i' significa insert prima della riga corrente, quindi '$ i' significa insert prima dell'ultima riga. – sigmalha

+0

Si potrebbe voler controllare 'if [" \ coda -n1 /etc/rc.local \ '"! = "Exit 0"]; allora ... "nel caso qualcuno abbia aggiunto una riga vuota. - Non sarebbe divertente notare alcune settimane dopo che il servizio non è stato riavviato, quando la macchina è stata riavviata – KajMagnus

1

Il modo più semplice sarebbe utilizzare un linguaggio script (ex: python, perl, ecc.).

#!/usr/bin/env python 
import os 

with open('/etc/rc.local') as fin: 
    with open('/etc/rc.local.TMP') as fout: 
     while line in fin: 
      if line == 'exit 0': 
       fout.write('nohup sh /bocommjava/socket.sh &\n') 
      fout.write(line) 

# save original version (just in case) 
os.rename('/etc/rc.local', '/etc/rc.local.jic') 

os.rename('/etc/rc.loca.TMP', '/etc/rc.local') 
+0

Bene, questo funziona bene, ma voglio ancora una soluzione di shell. Molte grazie! – missingcat92

+0

Un bel po 'di codice nella shell di base. Dai un'occhiata a http://bash.cyberciti.biz/file-management/read-a-file-line-by-line/ – user590028

Problemi correlati