kshバージョンを安全に入手するには?

kshバージョンを安全に入手するには?

どうやってできるか安全にkshスクリプトからkshバージョンを取得しますか?

私は持っています次の解決策を見ました。:

  1. ksh --version
  2. echo ${.sh.version}
  3. echo $KSH_VERSION

これらはすべて正しい状況でうまく機能します。しかし、私が心配するのは不完全です。

特に、私が作業しているいくつかのマシンには、私の目的に合った機能が深刻に欠けている古いバージョンのkshがインストールされています。とにかく、私が(プログラム的に)バージョンをチェックしたいのは、kshバージョンが弱いバージョンの1つであることを確認するためです。それでは、あまり良いコードで分岐を実行したいと思います。

しかし、問題のコンピュータでは、シェルの無能力はバージョンチェックまで拡張されます。

  • しようとするとksh --version何も印刷されず、新しいインスタンスが開きますksh
  • 試してみるとecho ${.sh.version}構文kshエラーとして扱われ、機能しません2> /dev/null

    $ echo ${.sh.version} 2> /dev/null  
    ksh: ${.sh.version}: bad substitution
    
  • もちろんecho $KSH_VERSIONうまくいくようです。衝突しないという意味です。このコンピュータでは空ですが。また、私は見たどこかにKSH_VERSION設定のみpdksh

質問:

  • プログラムでバージョンを安全に確認する方法はksh?私の目的のために、実際のバージョン番号が何であるかは重要ではなく、古いバージョンであるかどうかだけが重要ですksh
  • 十分ですか$KSH_VERSION?私の言葉は、空であればksh古いバージョンであるに違いないということですか?最新バージョンでも設定できないという他のフォーラムの内容は正しいですかksh
  • これを確認する方法はありませんか?

ベストアンサー1

KSH_VERSION93tより前のバージョンでは実装されていませんksh93mksh、、、pdkshに設定されますlksh。したがって、バージョンを確認するには、ksh次の手順を試してください。

これを念頭に置いて、私は次のことを行います。

case "$KSH_VERSION" in
  (*MIRBSD*|*PD*|*LEGACY*) printf '%s\n' "$KSH_VERSION" ;;
  (*) [ -z "$ERRNO" ] && printf '%s\n' "${.sh.version}" || echo ksh88/86 ;;
esac

おすすめ記事