Как изменить rc.local в сценарии оболочки? - PullRequest
2 голосов
/ 28 декабря 2011

Я хочу добавить строку (например, '*/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 ]

2 голосов
/ 28 декабря 2011

sudo command > filename выполняет command с использованием sudo (с привилегиями root), но записывает в filename с привилегиями пользователя (недостаточно для записи в / etc). Представь себе это так:

(sudo command) > filename

sudo относится только к части в скобках.

Вы можете запустить весь скрипт, используя sudo.

2 голосов
/ 28 декабря 2011

Это означает, что у вас нет разрешения ни на запись, ни на удаление файла. Кроме того, вы не сможете выполнить команду sudo без ввода пароля, поэтому в идеале сам скрипт должен запускаться с использованием sudo python scriptname.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...