2013-07-12 13 views
11

Pracuję nad Ubuntu 12.04 i piszę powłokę auto-build. W powłoce muszę zmienić coś w rc.local.Jak dodać linię do rc.local z powłoką

To jest teraz mój rc.local.

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

exit 0 

Chcę zmodyfikować go tak:

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

nohup sh /bocommjava/socket.sh & 

exit 0 

Teraz używam nano je modyfikować, czy istnieje komenda które mogą wstawić linię do rc.local?

+0

Czy za podniesienie tej kwestii na askubuntu jak również? –

+0

@wleoncio um ... Dobra rada. ale czy pozwalają mi publikować moje pytanie na dwóch stronach? – missingcat92

+0

Chyba tak, przynajmniej nigdy nie miałem żadnych problemów z robieniem tego. ;) –

Odpowiedz

25

Zastosowanie Sed

do testów

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

Naprawdę Zmienić

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

tak, to polecenie działa. Ale co znaczy $? Sprawdziłem wiele artykułów sed, nie znalazłem odpowiedzi. Dziękuję bardzo! – missingcat92

+4

$ należy podzielić na "$" i "i". "$" oznacza ostatnią linię, "i" oznacza wstawić przed bieżącą linią, więc "$ i" oznacza wstawić przed ostatnią linią. – sigmalha

+0

Możesz chcieć sprawdzić 'if [" \ 'tail -n1 /etc/rc.local \" "! =" Exit 0 "]; następnie ... 'na wypadek, gdyby ktoś dołączył pustą linię. - Nie byłoby fajnie zauważyć po kilku tygodniach, że usługa faktycznie nie uruchomiła się ponownie, gdy komputer został ponownie uruchomiony – KajMagnus

1

Najprostszym sposobem byłoby użycie języka skryptowego (np. Python, perl itp.).

#!/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

To działa dobrze, ale nadal chcę rozwiązania powłoki. Wielkie dzięki! – missingcat92

+0

Całkiem więcej kodu w podstawowej powłoce. Sprawdź http://bash.cyberciti.biz/file-management/read-a-file-line-by-line/ – user590028

Powiązane problemy