如何在shell脚本中修改rc.local?

时间:2011-12-28 14:02:27

标签: python linux bash shell rc

我想在shell脚本中向'*/data/mod/myservice start some_parameter*'文件添加一行(例如/etc/rc.d/rc.local。)。如果存在以'*/data/mod/myservice start*'开头的行,则将其替换为

在我的脚本中,它执行下一个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 个答案:

答案 0 :(得分:2)

这意味着您无权写入或删除该文件。此外,如果不输入密码,您将无法像这样运行sudo命令,因此理想情况下,脚本本身将使用sudo python scriptname运行。

答案 1 :(得分:2)

sudo command > filename使用command执行sudo(具有root权限),但使用用户的权限(不足以写入/ etc)写入filename。想象一下:

(sudo command) > filename

sudo仅适用于括号中的部分。

您可以使用sudo运行整个脚本。