2011-12-28 66 views
2

我想在shell腳本中添加一行(如'*/data/mod/myservice start some_parameter*')到/etc/rc.d/rc.local文件。如果存在以'*/data/mod/myservice start*'開頭的行,則將其替換爲新的如何修改shell腳本中的rc.local?

在我的腳本中,它執行下一個python方法。

def excuteCmd(cmd): 
    import commands 
    output = commands.getoutput(cmd) 

def setTask(cmd, installFlag): 
    print cmd, installFlag 
    excuteCmd('cat /etc/rc.d/rc.local > oldTask') 
    input = open('oldTask','r') 
    emptyFile = False 
    lines = input.readlines() 
    input.close() 
    taskNum = len(lines) 
    output = open('newTask', 'w') 
    if (taskNum == 0): 
      if (installFlag): 
        output.write(cmd + '\n') 
    else: 
      for i in range(taskNum): 
        if (lines[i].find(cmd) == -1): 
          output.write(lines[i]) 
      if (installFlag): 
        output.write(cmd + '\n') 
    output.close() 
    excuteCmd('sudo cat newTask > /etc/rc.d/rc.local') 
    excuteCmd('rm -f oldTask') 
    excuteCmd('rm -f newTask') 

但是,當我執行sudo cat newTask > /etc/rc.d/rc.local,它引發以下錯誤。

-bash: /etc/rc.d/rc.local: Permission denied

回答

2

這意味着你沒有許可任何寫入或刪除文件。另外,如果不輸入密碼,您將無法運行sudo命令,因此理想情況下腳本本身將使用sudo python scriptname運行。

+0

另外,我認爲我是對的,sudo命令只是指在>符號之前執行的事情,而不是在之後執行的事情。 jknupp可能知道,但我沒有想到他的回答中很清楚:) –

+0

thx,它已經解決了! – zhouzuan2k

2

sudo command > filename執行command使用sudo(具有root權限),但用用戶的權限(不足以寫入/ etc)寫入filename。想象一下這樣的:

(sudo command) > filename 

sudo僅適用於括號內的一部分。

您可以使用sudo運行整個腳本。