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
によって解釈されます。
その理由は何でしょうか?
$Shell
は必ずしも現在のシェルではなく、 デフォルトのログインシェル です。使用しているシェルを確認するには、
ps $$
これは、BSD構文をサポートするps
を使用する最新のUnix/Linuxで動作するはずです。それ以外の場合、これはポータブル(POSIX)の方法です
ps -p $$
tcsh
を実行している場合は、次のようになります。
8773 pts/10 00:00:00 tcsh
tcsh
をデフォルトのシェルにしたい場合は、chsh
を使用して設定します。
コマンドラインから、$0
変数を使用して、使用しているシェルを決定します。例えば。:
~$ echo $0
/bin/bash
~$ ksh
$ echo $0
ksh
注:$ 0はスクリプト自体なので、スクリプト内で$ 0を使用してシェルを特定することはできません。
これはLinuxで機能します。
lsof -a -p $$ -d txt
または、より強力な選択が必要な場合(より多くのシステム):
lsof -a +D /bin +D /usr/bin -p $$ -d txt
これは、上記のより良い答えのすべてに対する修正です。ある時点でダッシュを識別する小さな問題がありました。共有するのが正しいようです:
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
狭い場所でのトラブルシューティングに適しています。乾杯。