2013-07-12 2 views
11

나는 우분투 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 음 ... 좋습니다. 하지만 그들은 두 사이트에서 내 질문을 게시 할 수 있습니까? – 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

관련 문제