要手动进行修补我必须输入此命令
sudo ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
09 之前有一个空格:
sudo ./playback_delete_data_patch.sh [space] 09_delete_old_data_p.sql
我如何在脚本中运行它?
还有其他几个命令,但是这个命令带来了麻烦。
答案1
在脚本内部使用很少是一个好主意sudo
。相反,应该从脚本中删除sudo
,然后使用以下命令运行脚本本身sudo
:
sudo myscript.sh
这样,脚本中的所有命令都将以 root 权限运行,您只需在启动脚本时输入一次密码即可。如果您需要脚本中的某个特定命令以无sudo
权限运行,您可以以普通用户身份运行它(感谢赖安):
sudo -u username command
空间无关紧要,它不会影响任何事情,总是命令和其参数之间的空格。
答案2
您可以修改该sudoers
文件。
跑步sudo visudo
。
为您的用户名和您想要运行而不要求输入密码的脚本添加一个条目。
username ALL=(ALL) NOPASSWD: /path/to/script
答案3
您可以尝试以下方法:
echo "PASSWORD" | sudo -S ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
这不是最安全的做法,因为你是以纯文本形式写入 sudoer 密码的。为了使其更安全一些,你可以创建一个变量并将 sudo 密码读入该变量,然后可以按如下方式执行命令:
echo $PASSWORD | sudo -S ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
此外,如果您不介意以 root 身份执行所有命令,您可以简单地使用 执行脚本sudo
,如前面所建议的那样。
sudo ./myscript
答案4
其实还有一种更简单的方法。为了便于携带,这是我的实现,但您可以随意操作以满足您的需要。
在启动脚本时输入您的 sudo 密码作为参数,捕获它,并在每个将提示输入 sudo 密码的命令中回显它。
#!/bin/bash
PW=$1
echo $PW | ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
./command_wo_sudo.sh <param>
echo $PW | ./other_command_requires_sudo.sh <param>
您可以在脚本启动后添加提示和捕获,如下所示:
echo "enter the sudo password, please"
read PW
但是如果其他人监视节点上运行的内容;有权访问其创建的日志;或者只是在您运行测试时随机查看您的内容,则可能会危及安全性。
这也适用于需要“是”才能继续的运行命令/脚本:
echo $PW | yes | ./install.sh
echo 是对提示的响应,因此,如果您正在运行其他带有进度提示的脚本,则可以按顺序使用任何您需要的东西。不过,请确保您知道该顺序,否则可能会发生不好的事情。