どのシェルで実行していますか?

どのシェルで実行していますか?

実行すると出力にシェルを実行しているというメッセージecho $SHELLが表示されます。しかし、例えば次のコマンドを発行すると/bin/tcshtcsh

alias emacs 'emacs -nw' 

次のエラーが発生します:

bash: alias: emacs: not found
bash: alias: emacs -nw: not found

発行するとalias emacs="emacs -nw"正常に動作します!

tcsh実行しているのにコマンドが によって解釈されるため、混乱を招きますbash

理由は何でしょう?

答え1

$SHELL必ずしも現在のシェルではなく、デフォルトのログインシェル使用しているシェルを確認するには、

ps $$

psこれはBSD構文をサポートする最新のUnix/Linuxで動作するはずです。それ以外の場合は、これが移植可能な(POSIX)方法です。

ps -p $$

実行している場合は、次のような結果が返されますtcsh

8773 pts/10   00:00:00 tcsh

tcshをデフォルトのシェルにしたい場合は、 を使用してchsh設定します。

答え2

コマンドラインから、$0変数を使用して、使用しているシェルを決定することもできます。例:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

注意: $0 はスクリプト自体であるため、スクリプト内で $0 を使用してシェルを決定することはできません。

答え3

これは、上記のすべての優れた回答に対する修正です。ある時点でダッシュを識別する際に小さな問題がありましたが、共有するのが適切だと思いました。

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | sh
ash (dash 0.5.5.1 ff)

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | bash
bash 4.3.30(1)-release

窮地でのトラブルシューティングには役立つ、というだけです。乾杯。

答え4

Unix/Linux オペレーティング システムには複数のシェルがインストールされている場合があります。ターミナルで次のコマンドを入力すると、使用しているシェルを確認できます。

以下にリストを示します。

  • ボーンシェル – sh
  • C シェル – csh
  • T シェル – tcsh
  • Korn シェル – ksh
  • ボーンアゲインシェル – bash
  • ダッシュシェル
  • Zシェル

このリストは完全ではなく、他にも多くのシェルが存在します。

/etc/shellsファイルには、システムにインストールされているすべてのシェルのリストが保存されています。インストールされているシェルを確認するには、以下のコマンドを実行します。

$ cat /etc/shells

Unix または Linux オペレーティング システムにログインするときのデフォルトのシェルを確認するには、/etc/passwd ファイルで grep コマンドを実行します。

$ grep john /etc/passwd    

同じ目的で $SHELL 変数を使用することもできます。

echo $0
$ echo $SHELL

使用している場合、結果は以下のようになります。バッシュボーン・アゲイン・シェル) ターミナル: システムに複数のシェルがインストールされている場合は、いつでもシェルを切り替えることができます。

では、現在どのシェルを実行しているかをどのように確認するのでしょうか?

以下のコマンドを使用するだけです

-bash
$ ps -p $$

ご質問はすべてお答えできたと思います。それでも疑問がある場合は、このソース記事

関連情報