我编写了一个 shell 脚本来一次性更新和升级我现有的软件包。该脚本是:
#!/bin/bash
sudo apt-get update;
sleep 10;
sudo apt-get upgrade;
sleep 10;
sudo youtube-dl -U;
sleep 10;
sudo shutdown -h now;
exit 0
我面临的问题是,由于我的互联网连接速度不是很快,当它到达第三个命令时,密码会话已过期,我必须重新输入密码。为此,我必须一直坐在电脑前,这实际上违背了脚本的目的。
所以我的问题是:
有没有什么方法可以将密码存储在一个变量中,并且每次都
sudo
从该变量中输入密码,这样我就不必一直待在电脑旁边了?(或者任何可以做我想要的事情的类似的东西)
像这样:
#!/bin/bash
printf "Please enter your password: ";
read -s password
sudo apt-get update;
$password
sleep 10;
sudo apt-get upgrade;
$password
sleep 10;
sudo youtube-dl -U;
$password
sleep 10;
sudo shutdown -h now;
$password
exit 0
答案1
从脚本中的命令中删除 sudo,并以 root 身份运行实际脚本,例如。
#!/bin/bash
apt-get update;
sleep 10;
apt-get upgrade;
sleep 10;
youtube-dl -U;
sleep 10;
shutdown -h now;
exit 0
然后运行它sudo ./my-script.sh
答案2
这将允许您输入一次密码。对于命令apt-get
,以下所有命令都已将-y
标志设置为“自动对提示回答是”,但 除外dist-upgrade
。
sudo bash -c "apt-get -y update && apt-get dist-upgrade && youtube-dl -U && apt-get -y autoremove && apt-get -y autoclean && shutdown -h now"