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
ですか? - これを確認する方法はまったくありませんか?
PS1
この関数を使用するように設定しています。ただし、Old kshはではサポート$()
していませんPS1
。したがって、kshの最新バージョンのPS1
場合、作成した関数を使用します。古いバージョンの場合、を使用し$PWD
ます。