シェル関数は最初の引数のみを使用します。

シェル関数は最初の引数のみを使用します。

私は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

$1useを使用する代わりに"$@"

ローカル変数__pkgは必要ありません。私の考えでは、これはスクリプトが不必要に複雑になると思います。

私はまた、あなたが$[expression]算術評価を使用していることがわかりました。この構文は廃止されました。を使用することをお勧めします$((expression))。たとえば、n=$((n+1))

これはあなたの質問の範囲を超えていますが、タイムアウトの問題apt-getがある場合は、これを防ぐためにローカルミラー設定などの解決策を検討することをお勧めします。

おすすめ記事