web-dev-qa-db-ja.com

私はどのシェルにいますか?

現在のシェルの名前/タイプ、シェルバイナリへのパス、シェルのバージョンを識別するコマンドはありますか?

私はそれのすべてを必要としませんが、私が得ることができるほど、より良いです。

unamepwdwhoamiと同じ感じのものが欲しいです。単純な出力を持つ単純なユーティリティ。 (これまでのところ表示されていません:/)

re ps

$ ps -o comm $$
COMM
-bash

なぜ -bash他のすべての場合のようにフルパスの代わりに?ダッシュとの取引は何ですか?

41
kch

現在実行中のシェルへのコマンドまたはパスは、環境変数$0に格納されています。その値を表示するには、次を使用します。

echo $0

これにより、起動方法に応じて、現在実行中のシェルまたは現在実行中のシェルへのパスが出力されます。いくつかの処理が必要になる場合があります。

Prompt:~$ echo $0
/bin/bash
Prompt:~$ sh
sh-4.0$ echo $0
sh
sh-4.0$ exit
exit
Prompt:~$ /bin/sh
sh-4.0$ echo $0
/bin/sh
sh-4.0$

$Shell環境変数には、必ずしも現在実行中のシェルではなく、ユーザーの優先シェルが含まれています。

55
Mala

Shebang行でプログラムを指定しない場合、/ bin/shが使用されると思います。残念ながら、私はそのシェルが何であるかを決定するための良いポータブルな方法があるとは思いません。

Linuxなどを使用している場合は、/procから実行可能パスを確認できます。

$ readlink "/proc/$$/exe"
/bin/dash

ps $$を使用すると、実行可能ファイル名を簡単に取得できます。

しかし、それはシェルのタイプ(既知のシェルのルックアップテーブルを除く)やバージョン(AFAICT、ダッシュからバージョンを取得する方法すらありません)には役立ちません。

7
derobert

試してください($$は、シェルのプロセスIDに設定されたシェル変数です):

ps -ef | grep $$

またはこれを試してください(/ proc/selfはシェルのアロソプロセスIDです):

ps -ef | grep /proc/self

「-bash」に関して-ダッシュはログインシェルであることを意味します。もう一度bashと入力すると、シェルが "bash"(ダッシュなし)であることがわかります。

5
dimba

私は「指」があなたが探している正しいものだと思います。このコマンドを試してください:

finger `whoami`
2
Jackie Yeh

現在使用されているシェルを特定しようとするのではなく、目的のシェルとして単純に再実行する方が通常はより適切です。これは、現在使用しているシェルを判別するための信頼できる移植可能な方法がないという事実の歴史的な回避策にすぎない可能性があります。最善の方法は、問題が発生しないように、できるだけ多くのシェルで動作するようにスクリプトを作成することです。 (たとえば、「bashはどこにでもある」と主張したがる人の数に関係なく、移植性が重要です。)

1
William Pursell

Arch Linuxでは以下を使用できます。

echo $Shell
0
Upul Doluweera