2013-07-12 12 views
11

私はUbuntu 12.04で作業しており、環境自動構築シェルを作成しています。シェルでは、rc.localで何かを変更する必要があります。シェルを使ってrc.localに行を追加するには

これは私のrc.localです。

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

exit 0 

私はこのようにそれを変更したい:

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

nohup sh /bocommjava/socket.sh & 

exit 0 

今、私はそれを修正するために、ナノを使用し、rc.localにに行を挿入することができます任意のコマンドはありますか?

+0

あなたにもaskubuntuにこの質問を上げる考えがありますを変更しますか? –

+0

@wleoncio um ...良いアドバイス。しかし、私は2つのサイトで私の質問を公表することができますか? – missingcat92

+0

私はそう思う、少なくとも私はそれをすることに何の問題もなかった。 ;) –

答えて

25

使用Sed

テスト

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

にとって本当に

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

をチェックしてください。はい、このコマンドが機能します。しかし、どういう意味ですか?私は多くのsedの記事をチェックし、答えを見つけられませんでした。ありがとうございます! – missingcat92

+4

$ iを '$'と 'i'に分ける必要があります。 '$'は最後の行を意味し、 'i'は現在の行の前に挿入することを意味し、 '$ i'は最後の行の前に挿入することを意味します。 – sigmalha

+0

if ["tail -n1 /etc/rc.local \' "!=" exit 0 "]をチェックしたいかもしれません。誰かが空白行を追加してしまった場合には、「...」と表示されます。 - 数週間後に、マシンが再起動されたときにサービスが実際に再起動しなかったことに気づくのは楽しいことではありません – KajMagnus

1

最も簡単なのは、スクリプト言語(例:python、perlなど)を使用することです。

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

これはうまくいきますが、私はまだシェルソリューションが必要です。どうもありがとう! – missingcat92

+0

基本的なシェルのコードはもう少し多いです。 http://bash.cyberciti.biz/file-management/read-a-file-line-by-line/ – user590028

関連する問題