私はLinuxの新しいインストールをカスタマイズし、apt-get installを実行するいくつかの部分を含むスクリプトを書いています。接続に問題があり、時には動作が停止し、apt-getが失敗する可能性があります。そうした場合、スクリプトは他のコマンドを処理し続けます。
次のスクリプトは機能しますが、もう1つの問題があります。たとえば、関数をエクスポートすると、リストされた最初のパッケージのみがインストールaptinstall firefox firefox-locale-en
されます。
最大5回失敗すると、再試行する関数でapt-getが実行されるようにスクリプトを修正しました。
# 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
useを使用する代わりに"$@"
。
ローカル変数__pkgは必要ありません。私の考えでは、これはスクリプトが不必要に複雑になると思います。
私はまた、あなたが$[expression]
算術評価を使用していることがわかりました。この構文は廃止されました。を使用することをお勧めします$((expression))
。たとえば、n=$((n+1))
。
これはあなたの質問の範囲を超えていますが、タイムアウトの問題apt-get
がある場合は、これを防ぐためにローカルミラー設定などの解決策を検討することをお勧めします。