GNU/Linux >> Linux の 問題 >  >> Linux

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の新しいバージョンでも設定されない可能性があるという他のフォーラムは正しかったですか? ?
  • これを確認する方法はまったくありませんか?

承認された回答:

KSH_VERSION ksh93には実装されていません バージョン93tより前。 mkshで設定されます 、pdkshlksh 。したがって、kshのバージョンを確認するため 、次の手順を試すことができます:

  • KSH_VERSIONを確認しています mkshを検出する 、pdkshlksh
  • 最初の手順が失敗した場合は、ksh93とは異なる機能を試してください およびksh88/86 (David Kornに見せてもらいましょう。)

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

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

Linux
  1. OSとLinuxのバージョンを確認する方法

  2. Uuencodeを機能させる方法は?

  3. LinuxでMySQLのバージョンを確認する方法

  1. 自動マウントのUSBキーを取得するにはどうすればよいですか?

  2. コマンドラインから nvidia ドライバーのバージョンを取得するには?

  3. bashでループの終了ステータスを取得する方法

  1. Ubuntuで最新バージョンのWinetrickを入手するにはどうすればよいですか?

  2. Pythonで(MB)ファイルのtar.gzのサイズを取得する方法

  3. Makefile でユーザー名を取得するにはどうすればよいですか?