私は端末がシェルに他ならないことを読み、Unixはさまざまな種類のシェルを提供しています。
- ボーンシェル(sh)
- Cシェル(csh)
- TCシェル(tcsh)
- Kornシェル(ksh)
- Bourne Againシェル(bash)
質問:
- ターミナルウィンドウを開くと、デフォルトでどのシェルが開きますか?
- インストールされているシェルの数を確認するにはどうすればよいですか?
- アカウントから使用するシェルを変更するにはどうすればよいですか?
私は端末がシェルに他ならないことを読み、Unixはさまざまな種類のシェルを提供しています。
回答:
ターミナルで次のコマンドを入力して、使用しているシェルを確認できます。
echo $0
bash(Bourne Again Shell)ターミナルを使用している場合、結果は次のようになります。
-bash
0
環境変数は?
csh
。% echo $0 No file for $0.
が、それのために働くんtcsh
bash
にsh
echo $0
、ls -l `which <name>`
それが別のシェルバイナリにシンボリックリンクされているかどうかを確認します。
デフォルト環境にあるシェルを見つけるには、SHELL
環境変数の値を確認できます。
echo $SHELL
現在のシェルインスタンスを見つけるには、現在のシェルインスタンスのPIDを持つプロセス(シェル)を探します。
シェルの現在のインスタンスのPIDを見つけるには:
echo "$$"
次に、PIDを持つプロセスを見つけます。
ps -p <PID>
それを一緒に入れて:
ps -p "$$"
echo $SHELL
私/bin/csh
にps -p $$
与えてくれました22673 pts/1 00:00:00 bash
。キングミロは、なぜ同じではないのか(上で)説明した。
$SHELL
デフォルトのシェルを提供します。
$0
現在のシェルを提供します。
たとえば、デフォルトのシェルとしてbashがあり、これをターミナルアプリに使用しています。しかし、私のiTerm2アプリでは、ウィンドウが開くときにコマンドを使用します/bin/ksh
。
だから私$0
は/bin/ksh
iTerm2で私に
与えます。
iTerm2 $SHELL
を教え/bin/bash
てくれます。
$0
、ターミナルで$SHELL
私/bin/bash
に与えます
bash
。ターミナルで入力するだけです。zshの、型に戻すためにzsh
ユーザーのデフォルトシェルを確認するには、次を実行します。
echo "$SHELL"
たとえば、Bashを使用している場合、次の出力が得られます。
/bin/bash
構成を変更しなかった場合、BashはUbuntuのデフォルトシェルであるため、Bashになります。
/bin/sh
私の答えに参照はありません
$$
変数は実際にはPOSIXによって定義されており、大部分のシェルで機能します。魚はここで標準に従わないことに決めたので、それを無視するのは公平だと思う。$$
sh、dash、bash、zsh、ksh、ash、tcsh、cshで期待どおりに機能することを確認できます。実際、私の頭の上では、機能しない魚以外のシェルは考えられません。
他の答えは、シェル固有の機能を使用する傾向がありますが、使用しているシェルを発見しようとしているため、問題に対する答えを想定しています。例えば、答えはどれも魚には機能しません。
sh -c 'ps -p $$ -o ppid=' | xargs ps -o comm= -p
代わりに、shの呼び出しで$$構文を使用しますが、PIDではなくPPIDを探しています。PPIDを使用して、cmdを見つけます。
sh -c 'ps -p $$ -o ppid=' | xargs -I'{}' readlink -f '/proc/{}/exe'
改善してくれてありがとう@muru
ppid=
/ cmd=
を使用してヘッダー(およびtail -1
s)を省略し、/proc/.../exe
実行中のファイルを確認することを検討します(cmd
シェルを実行したもので出力を操作できるため)。
元の投稿は3つの質問をしました。与えられた答えは、「ターミナルウィンドウを開くと、デフォルトでどのシェルが開かれますか?」という最初の質問をカバーしています。また、「端末で現在実行されているシェルを確認するにはどうすればよいですか」という質問にも答えられません。しかし、私が見る限り、最初に尋ねられた2番目または3番目の質問、つまり「インストールされているシェルの数を確認するにはどうすればよいですか」に誰も答えていません。「アカウントから使用するシェルを変更するにはどうすればよいですか?」
猫/ etc / shells
たとえば、Ubuntu 18.10のデフォルトのインストールでは、次の結果が得られます。
#/ etc / shells:有効なログインシェル
/ bin / sh
/ bin / dash
/ bin / bash
/ bin / rbash
ただし、デフォルトではshはダッシュへのシンボリックリンクであり、rbashはオプション-r( "restricted bash")を使用してbashにリンクするため、実際には上記のリストが示す4つではなく2つのシェルしかありません。次のコマンドは、リストされたシェルのいずれかが実際にシンボリックリンクであるかどうか、およびリンクしている場合はリンク先を表示します。ls -l / bin