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

2 投票
2 回答
3037 浏览
提问于 2025-04-17 09:09

我想在一个叫做 /etc/rc.d/rc.local 的文件里添加一行,比如 '*/data/mod/myservice start some_parameter*'。如果这个文件里已经有一行是以 '*/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: 权限被拒绝

2 个回答

2

sudo command > filename 这个命令是用来以超级用户的身份(也就是有更高权限的用户)来执行 command,但是它把结果写入 filename 时却是用普通用户的权限(这可能不够写入 /etc 这个文件夹)。可以想象成这样:

(sudo command) > filename

这里的 sudo 只对括号里的部分有效。

你也可以用 sudo 来运行整个脚本。

2

这意味着你没有权限去写入或删除这个文件。而且,你不能像那样运行 sudo 命令,因为需要输入密码。所以,最好是用 sudo python scriptname 来运行这个脚本。

撰写回答