我正在编写一个脚本来自定义 Linux 的全新安装,并且有几个部分运行 apt-get install。我的连接遇到了一些问题,它偶尔会停止工作,这可能会导致 apt-get 失败,当发生这种情况时,脚本将继续处理其他命令。
以下脚本有效,但现在我遇到了另一个问题:例如,如果发出该函数aptinstall firefox firefox-locale-en
,它只会安装列出的第一个包。
我修改了脚本,以便 apt-get 在一个函数中运行,如果失败最多 5 次,该函数将重试:
# Install package - will retry download if connection fails up to 5 times and abort if unsuccessful
function aptinstall (){
local __pkg=$1
set +x
n=0
until [ $n -ge 5 ]
do
apt-get install -y $__pkg && break
n=$[$n+1]
sleep 15 # Wait 15 seconds before trying to download and install packages again
done
if [ "$n" -eq 5 ]; then
echo >&2 "An error has occurred. Please check your network connection."
exit 1
fi
谁能帮我弄清楚为什么只安装第一个包?谢谢!
答案1
而不是使用$1
使用"$@"
.
您不需要局部变量 __pkg。在我看来,这不必要地使脚本变得复杂。
我还注意到您正在使用$[expression]
算术评估。该语法已被弃用。我建议使用$((expression))
。例如,n=$((n+1))
。
这超出了您的问题范围,但如果您遇到apt-get
超时问题,您可能需要研究解决方案来避免这种情况,例如设置本地镜像。