我有一个长时间运行的 bash 脚本,其中一些命令需要以 root 身份运行,而大多数命令需要在 sudo 之前以普通用户身份运行,因为它会弄乱文件所有权等。
我想出了一些方法,但每个方法都有一些问题
方法一:在文件中使用sudo
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
Run Code Online (Sandbox Code Playgroud)
从代码的编写方式来看,这看起来不错。sudo写在几条实际需要root运行的语句之前,但是如果每次sudo调用之间的时间太长sudo再次要求输入密码。此外,如果第一次执行sudo失败,例如由于密码无效,脚本的其余部分仍会执行。
方法二:使用sudo调用文件,需要时再改回原用户
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must …Run Code Online (Sandbox Code Playgroud)