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


39

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ます。

理由は何でしょうか?


tcsh/csh現在のシェルは$shell
HongboZhu

回答:


48

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

ps $$

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

ps -p $$

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

8773 pts/10   00:00:00 tcsh

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


どの設定ファイルがロードされているかを確認する方法を知っていますか?(bashrc)
coffeMug

@Coffe_Mugはどういう意味かわからない。あなたがデフォルトのシェルを設定することができchsh.bashrcあなたは私がしている場合はbashを実行している)だけ読み込まれると、ii)インタラクティブ、非ログインシェルとしてそれを実行しています。このマシンにどのようにログインしていますか?
テルドン

このbashシェルをtcshシェルから起動するスクリプトがあります。
coffeMug

4
なぜだけではなくps $$
CJM

1
@cjmなぜそうではないのか、回答は編集済みです。
テルドン

8

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

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

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


1

これはLinuxで機能します:

lsof -a -p $$ -d txt

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

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

1

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.