どうやってできるか安全にkshスクリプトからkshバージョンを取得しますか?
私は持っています次の解決策を見ました。:
ksh --version
echo ${.sh.version}
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_VERSION
93tより前のバージョンでは実装されていませんksh93
。mksh
、、、pdksh
に設定されますlksh
。したがって、バージョンを確認するには、ksh
次の手順を試してください。
- , ,
KSH_VERSION
検出確認mksh
pdksh
lksh
- 最初の手順が失敗した場合は、次のような
ksh93
他の機能を試してください。ksh88/86
David Cohenが私たちに見せてください)。
これを念頭に置いて、私は次のことを行います。
case "$KSH_VERSION" in
(*MIRBSD*|*PD*|*LEGACY*) printf '%s\n' "$KSH_VERSION" ;;
(*) [ -z "$ERRNO" ] && printf '%s\n' "${.sh.version}" || echo ksh88/86 ;;
esac