Bash 関数の条件付きコマンドと引数は、Ubuntu を Alpine として奇妙で間違って解釈します。

Bash 関数の条件付きコマンドと引数は、Ubuntu を Alpine として奇妙で間違って解釈します。

バンドルマネージャを検出するためにコードを再設定し、値をキャプチャするための新しいパラメータを追加しました。

get_package_manager_install()
{
  if   [ -x "$(command -v $1)" ]; then echo "$1 add --no-cache $2";  # apk add --no-cache
  elif [ -x "$(command -v $1)" ]; then echo "$1 install -y $2";      # apt install -y
  elif [ -x "$(command -v $1)" ]; then echo "$1 install -y $2";      # dnf install -y
  elif [ -x "$(command -v $1)" ]; then echo "$1 -av $2";             # emerge -av
  elif [ -x "$(command -v $1)" ]; then echo "$1 -S --noconfirm $2";  # pacman -S --noconfirm
  elif [ -x "$(command -v $1)" ]; then echo "$1 in $2";              # zypper in
  else        
    echo "Unknown manager manager" &>/dev/null
  fi
}

次に、2つのパラメータを入力して関数を実行します。

get_package_manager_install 'apk'     "musl-locale"
get_package_manager_install 'apt'     "locales locales-all"
get_package_manager_install 'dnf'     "glibc"
get_package_manager_install 'emerge'  "sys-libs/glibc"
get_package_manager_install 'pacman'  "glibc"
get_package_manager_install 'zypper'  "glibc"

Ubuntuで実行しましたが、結果は次のとおりです。

apt add --no-cache locales locales-all

この関数はUbuntuがAlpineだと思うようなif [ -x "$(command -v $1)" ]; then echo "$1 add --no-cache $2"のでelif [ -x "$(command -v $1)" ]; then echo "$1 install -y $2"現在locales locales-all

ベストアンサー1

おすすめ記事