如何在脚本内运行“sudo”命令?

如何在脚本内运行“sudo”命令?

要手动进行修补我必须输入此命令

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 是对提示的响应,因此,如果您正在运行其他带有进度提示的脚本,则可以按顺序使用任何您需要的东西。不过,请确保您知道该顺序,否则可能会发生不好的事情。

相关内容