端末で使用しているシェルをどのようにテストしますか?

端末で使用しているシェルをどのようにテストしますか?

端末でどのシェルを使用しているかどうかを確認できますか? MacOSではどのシェルを使用しますか?

答え1

最も信頼できるものから最も信頼性の低いものまで(最も「重い」ものから)、いくつかの方法があります。

  1. ps -p$$ -ocmd=。 (Solarisではなければならずps -p$$ -ofname=、macOSとBSDではなければなりませんps -p$$ -ocommand=。)
  2. $BASH_VERSIONその他$ZSH_VERSIONのシェル関連変数を確認してください。
  3. ビュー$SHELL;これはあなたを指定する最後の手段です。基本シェルが必ずしも必要ではない現在のシェル。

答え2

私のシステムにインストールされている4つのシェル(bash、dash、zsh、csh)で次のことができることがわかりました。

$ ps -p $$

以下はzsh、bash、dashには適用されますが、cshには適用されません。

$ echo $0

答え3

質問は、使用されているシェルについて尋ねられ、渡された潜在的な引数については議論しないので、これを表示しない方法があります。

$ ps -o comm= -p $$
ksh93 

答え4

非常に簡単な2つの方法があります。

  • 使用メモ注文する:

    ps -o comm= $$
    

    または

    ps -h -o comm -p $$
    

    どこ:

    • -hまたは=ヘッダーを表示したくない場合は、すべてのオプションを完了してください。
    • -o commプロセスのデフォルト名のみが表示されます(bash代わりに/bin/bash)。
    • -p <PID>PIDのテーブルリストを提供するプロセスのみが一覧表示されます。
  • 使用/プロセス擬似ファイルシステムのプロセス情報:

    cat /proc/$$/comm
    

    このオプションは上記のコマンドとまったく同じように機能しますps

    または

    readlink /proc/$$/exe
    

    これは/proc/PID/exe実行中のファイルへのリンクであり、この場合は/bin/bash、/bin/kshなどを指します。

    シェルの名前だけを取得するには、次のものを使用できます。

    basename $(readlink /proc/$$/exe)
    

    これは、使用中のシェルインタプリタのバイナリへのリンクであり、スクリプト、ソースコード、または端末にあっても常に同じ結果を提供する唯一のオプションです。

    警告するこれは最終バイナリを示すので、kshがksh93に接続されているか、shがbashに接続できることに注意してください。

現在のコマンドのPIDに接続して利用すると/proc非常に便利です。/proc/self

関連情報