
実行すると出力にシェルを実行しているというメッセージecho $SHELL
が表示されます。しかし、例えば次のコマンドを発行すると/bin/tcsh
tcsh
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 $$
ご質問はすべてお答えできたと思います。それでも疑問がある場合は、このソース記事。