赞
踩
要手动执行修补,我必须输入此命令
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的answer。我还建议使用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</code>
#!/bin/bash
# this declares that current user is a sudoer
sudo tee /etc/sudoers.d/$USER <<END
END
# write the content of your script here
sudo npm install hexo-cli -g
mkdir Untitled
sudo apt-get install python
# then to remove the sudo access from the current user
sudo /bin/rm /etc/sudoers.d/$USER
sudo -k
实际上有一种更简单的方法可以做到这一点。为了便于携带,这是我的实现,但随时可以根据您的需要进行操作。
在启动脚本时输入您的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
您可以在脚本启动后添加提示和捕获,如下所示:
echo "enter the sudo password, please"
read PW
但是,如果其他人监视节点上运行的内容;可以访问由它创建的日志;或者只是在运行测试时随机查看,这可能会危及安全性。
这也适用于运行需要yes继续的命令/脚本:
echo $PW | yes | ./install.sh
回显是对提示的响应,因此,如果您按顺序运行其他提示进度的脚本,则可以使用您需要的任何内容。但要确保你知道订单,否则会发生不好的事情。
参考:https://ubuntuqa.com/article/1440.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。