web-dev-qa-db-ja.com

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

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によって解釈されます。

その理由は何でしょうか?

40
coffeMug

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

ps $$

これは、BSD構文をサポートするpsを使用する最新のUnix/Linuxで動作するはずです。それ以外の場合、これはポータブル(POSIX)の方法です

ps -p $$

tcshを実行している場合は、次のようになります。

8773 pts/10   00:00:00 tcsh

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

49
terdon

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

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

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

9
jamespfinn

これはLinuxで機能します。

lsof -a -p $$ -d txt

または、より強力な選択が必要な場合(より多くのシステム):

lsof -a +D /bin +D /usr/bin -p $$ -d txt
1
user79743

これは、上記のより良い答えのすべてに対する修正です。ある時点でダッシュを識別する小さな問題がありました。共有するのが正しいようです:

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

狭い場所でのトラブルシューティングに適しています。乾杯。

1
todd_dsm