我想在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
答案 0 :(得分:2)
这意味着您无权写入或删除该文件。此外,如果不输入密码,您将无法像这样运行sudo
命令,因此理想情况下,脚本本身将使用sudo python scriptname
运行。
答案 1 :(得分:2)
sudo command > filename
使用command
执行sudo
(具有root权限),但使用用户的权限(不足以写入/ etc)写入filename
。想象一下:
(sudo command) > filename
sudo
仅适用于括号中的部分。
您可以使用sudo
运行整个脚本。