绕过“apt-get upgrade”中的是/否提示

绕过“apt-get upgrade”中的是/否提示

为了避免在更新计算机时输入所有 apt-get 命令,我创建了一个简单的别名命令来执行此操作。但我真的希望能够只输入我的别名并让它执行操作,而不必等待是/否提示输入“y”。有没有简单的方法可以绕过此提示,或者在别名的某个地方添加“yes”?

答案1

当然,虽然我从未尝试过将其作为别名,但它应该可以工作:

sudo apt-get update && sudo apt-get -y upgrade

答案2

apt-get -o Dpkg::Options::='--force-confold' --force-yes -fuy dist-upgrade

Dpkg::Options::='--force-confold'从手册页中澄清:

--force-confold:不修改当前配置文件,新版本安装时会带有后缀.dpkg-dist。仅使用此选项,即使您未修改的配置文件也会保持不变。您需要将其与--force-confdef让 dpkg 覆盖您未修改的配置文件。

答案3

apt-get update && apt-get upgrade -y && apt-get autoremove && apt-get autoclean

这将更新软件包、升级软件包、删除未使用的软件包,然后删除旧版本的软件包。

您可以将其复制粘贴到:

nano -w yourscript.sh

然后

chmod 777 yourscript.sh

然后

./yourscript.sh

只要您su在所有这些步骤之前使用,我总是这么做。

答案4

@wojox 回答是正确的,但您可以进一步利用别名来实现更多功能。我已经使用它很长时间了,没有问题。这将执行升级(使用 确认-y),然后测试是否需要重新启动。如果需要重新启动,您可以按 进行[ENTER],或者按 取消并稍后重新启动[CTRL+C]。如果不需要重新启动,别名会通知您。

我的别名sursudo upgrade reboot,但您可以随意命名。将以下内容添加到您的.bashrc文件中:

alias sur='sudo apt update && sudo apt upgrade -y && if sudo test -f /var/run/reboot-required; then read -p "A reboot is required to finish installing updates. Press [ENTER] to reboot now, or [CTRL+C] to cancel and reboot later." && sudo reboot; else echo "A reboot is not required. Exiting..."; fi'

如果您想使用同一个别名执行更多操作,可以继续链接更多命令。这是我的完整别名,.bashrc它还将删除未使用的包:

alias sur='sudo apt update && sudo apt dist-upgrade -y && sudo apt autoremove -y && if sudo test -f /var/run/reboot-required; then read -p "A reboot is required to finish installing updates. Press [ENTER] to reboot now, or [CTRL+C] to cancel and reboot later." && sudo reboot; else echo "A reboot is not required. Exiting..."; fi'

实际上,我在检查是否有一个选项可以跳过配置文件覆盖提示时偶然发现了这个线程,该选项在@Vadim 的回答!我的新别名是这样的:

alias sur='sudo apt update && sudo apt -o Dpkg::Options::="--force-confdef" dist-upgrade -y && sudo apt autoremove -y && if sudo test -f /var/run/reboot-required; then read -p "A reboot is required to finish installing updates. Press [ENTER] to reboot now, or [CTRL+C] to cancel and reboot later." && sudo reboot; else echo "A reboot is not required. Exiting..."; fi'

然后我.bashrc只需使用以下命令将这个新文件推送到每个托管服务器:

while read HOST; do scp .bashrc username@$HOST:/home/username; done < managedhosts.txt

相关内容