这可能是一个简单的问题,但是......
我有一个 update.sh 文件,内容如下:
sudo apt-get update
sudo apt-get upgrade
当我使用 ./update.sh 运行此脚本时(将其设置为可执行文件后),它会要求我输入 sudo 密码。这会运行两个命令吗?我基本上只能运行此脚本一次,然后 apt-get update/upgrade 命令就会被处理?
感谢大家
答案1
这种方式sudo
默认会给你 15 分钟的时间,然后才会再次要求输入密码。所以,是的,使用这两个命令,效果很好,具体取决于apt-get update
运行时间,你需要输入一次密码。
但是,这不是最佳做法。相反,我建议使用 sudo 运行整个脚本,而不是将其放在文件中每个命令的前面。换句话说,脚本应该是:
#!/bin/bash
apt-get update
apt-get upgrade
并运行它
sudo ./my_script.sh
请注意,这里我们使用#!/bin/bash
line 来使用bash
shell 作为解释器。这与 非常不同/bin/sh
。对于你正在做的事情来说,这没什么区别,但如果你需要注意,它们在某些运算符的语法上有所不同。
但是,更好的方法是完全摆脱脚本,使用函数或别名来执行您想要的操作。脚本实际上适用于您想要重复使用的大量代码。对于~/.bashrc
文件中的 2 - 3 行函数或别名来说,这就足够了。
我个人会在我的~/.bashrc
alias agu="sudo bash -c 'apt-get update && apt-get upgrade'"
答案2
不要忘记设置DEBIAN_FRONTEND=noninteractive
关于要维护哪个版本的那些令人讨厌的提示:
sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y;
如果不这样做,您的脚本将处于修补困境。因此,如果您要在脚本中执行此操作,我只需执行以下操作:
#!/usr/bin/env bash
set -e
patching(){
sudo apt-get update -y;
sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y;
};
patching;
前面提到的方法在大多数情况下都会有效(如果它们有标志-y
),直到它们由于交互式提示而无法工作。
希望它能够帮助其他人修复/引导脚本。