如何在脚本中运行’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 

如何在脚本中运行它?

还有其他一些命令但是这个命令很麻烦。

在脚本中使用sudo很少是个好主意。 相反,从脚本中删除sudo并使用sudo运行脚本本身:

 sudo myscript.sh 

这样,脚本中的所有命令都将以root权限运行,您只需在启动脚本时提供一次密码。 如果您需要在没有sudo权限的情况下运行脚本中的特定命令,则可以将其作为常规用户运行(感谢Lie Ryan ):

 sudo -u username command 

空间是无关紧要的,它不应该影响任何东西,命令和它的参数之间总是有一个空格。

您可以修改sudoers文件。

运行sudo visudo

为您的用户名和要运行的脚本添加条目,而不要求输入密码。

 username ALL=(ALL) NOPASSWD: /path/to/script 

你可以尝试类似的东西:

 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 

这个答案类似于terdon的答案 。 我还建议使用sudo运行主脚本,这样您就可以运行命令而无需向用户询问任何密码。

但是,如果您想要以root用户或特定系统用户身份运行某些命令,而不是以sudo运行命令的实际用户,则可以检查$SUDO_USER变量以找出原始用户。

这是一个如何实现这一目标的示例脚本:

 #!/bin/bash # ref: https://askubuntu.com/a/30157/8698 if ! [ $(id -u) = 0 ]; then echo "The script need to be run as root." >&2 exit 1 fi if [ $SUDO_USER ]; then real_user=$SUDO_USER else real_user=$(whoami) fi # Commands that you don't want run with root would be invoked # with: sudo -u $real_user # So they will be ran as the user who invoked the sudo command # Keep in mind, if the user is using a root shell (they're logged in as root), # then $real_user is actually root # sudo -u $real_user non-root-command # Commands that need to be ran with root would be invoked without sudo # root-command 
 #!/bin/bash # this declares that current user is a sudoer sudo tee /etc/sudoers.d/$USER < 

实际上有一种更简单的方法可以做到这一点。 为了便于携带,这是我的实现,但随时可以根据您的需要进行操作。

在启动脚本时输入您的sudo密码作为参数,捕获它,并使用每个命令回显它,这将提示输入sudo密码。

 #!/bin/bash PW=$1 echo $PW | ./playback_delete_data_patch.sh 09_delete_old_data_p.sql ./command_wo_sudo.sh  echo $PW | ./other_command_requires_sudo.sh  

您可以在脚本启动后添加提示和捕获,如下所示:

 echo "enter the sudo password, please" read PW 

但是,如果其他人监视节点上运行的内容; 可以访问由它创建的日志; 或者只是在运行测试时随机查看,这可能会危及安全性。

这也适用于运行需要yes继续的命令/脚本:

 echo $PW | yes | ./install.sh 

回显是对提示的响应,因此,如果您按顺序运行其他提示进度的脚本,则可以使用您需要的任何内容。 但要确保你知道订单,否则会发生不好的事情。

您可以尝试将运行该脚本的用户添加到sudoers文件中:

 #give permissions to the file sudo chmod 700 /etc/sudoers.d/useradm sudo visudo /etc/sudoers.d/useradm #add the following text, changing "user" but your desired user user ALL=(ALL)NOPASSWD:ALL #return the right permissions to the file sudo chmod 440 /etc/sudoers.d/useradm