[解決済み] 現在作業しているシェルを判断する方法
質問
現在作業しているシェルを判断するにはどうすればよいですか?
の出力は
ps
コマンドだけで十分なのでしょうか?
Unixの異なるフレーバーでこれを行うにはどうしたらよいでしょうか?
どのように解決するのですか?
-
を見つけるには、3つのアプローチがあります。 名前 現在のシェルの実行ファイルの
この3つのアプローチはすべて、シェルの実行ファイルが
/bin/sh
をリネームしたもので、実際にはbash
などと言われることがあります(よくあることです)。したがって、2つ目の質問である
ps
という答えが返ってきます。 常に "です。-
echo $0
- は、プログラム名...シェルの場合は実際のシェルを表示します。 -
ps -ef | grep $$ | grep -v grep
- とすると、実行中のプロセスの一覧から現在のプロセス ID を探します。現在のプロセスはシェルであるため、シェルが含まれることになります。これは100%信頼できるものではありません。 その他 プロセスで
ps
のリストにはシェルのプロセス ID と同じ数字が含まれており、特にその ID が小さな数字である場合 (例えばシェルの PID が "5" である場合、 "java5" や "perl5" というプロセスが同じgrep
を出力してください!)。 これは、シェル名に依存できないことに加えて、"ps"アプローチの2つ目の問題点です。 -
echo $SHELL
- 現在のシェルへのパスはSHELL
変数を使用します。これの注意点は、サブプロセスとして明示的にシェルを起動した場合(例えば、ログインシェルでない場合)、代わりにログインシェルの値を取得することです。もしその可能性があるのならps
または$0
のアプローチになります。
-
-
しかし、実行ファイルが実際のシェルと一致しない場合(例.
/bin/sh
は実際にはbashかkshです)、ヒューリスティックが必要です。ここでは、様々なシェルに固有の環境変数を紹介します。-
$version
はtcshに設定されています -
$BASH
はbashに設定されています。 -
$shell
(小文字)はcshまたはtcshの実際のシェル名に設定されます。 -
$ZSH_NAME
はzshに設定されています -
kshは
$PS3
と$PS4
が設定されているのに対し、通常のBourneシェル(sh
) のみです。$PS1
と$PS2
のセットです。これは一般的に最も区別がつきにくいように思われます。 のみ との環境変数のセット全体の違いsh
とksh
Solaris boxenにインストールしているのは$ERRNO
,$FCEDIT
,$LINENO
,$PPID
,$PS3
,$PS4
,$RANDOM
,$SECONDS
および$TMOUT
.
-
関連
-
[解決済み】ZIPエラー - 何もできない
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] ディレクトリが存在しない場合のみmkdirする方法は?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] Bashでファイルの中身をループする
-
[解決済み] シェルコマンドの実行と出力のキャプチャ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Bashのシンタックスエラー:予期しないファイルの終わり
-
[解決済み] bash : cd : 引数が多すぎる [閉店].
-
[解決済み] bashスクリプトでタブ文字をエコーする
-
[解決済み] Curl:応答を待たない[重複]。
-
[解決済み] grepの出力に含まれる重複を削除する
-
[解決済み] ConcatenationとAppendの違いについて【終了しました
-
[解決済み] findコマンドと一緒に使用するとエラー 'rm: missing operand' が発生する。
-
[解決済み] 絶対パスと論理パスの違い
-
[解決済み] シェルスクリプトでの連想配列
-
[解決済み] BashでDo-whileループをエミュレートする