2

シェルスクリプトでファイルに行( '*/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

4

2 に答える 2

2

sudo command > filenameは(root 権限で)commandを使用して実行されますが、ユーザーの権限で に書き込みます (/etc に書き込むには不十分です)。次のように想像してください。sudofilename

(sudo command) > filename

sudoブラケット部分のみに適用されます。

を使用してスクリプト全体を実行できますsudo

于 2011-12-28T14:08:24.110 に答える
2

これは、ファイルへの書き込みまたは削除の権限がないことを意味します。また、パスワードを入力しないとそのようなコマンドを実行できないsudoため、理想的にはスクリプト自体をsudo python scriptname.

于 2011-12-28T14:05:24.607 に答える