$ 0と$ SHELLの違いは何ですか?

$ 0と$ SHELLの違いは何ですか?

私は現在OverTheWireのウェブサイトでCTFをプレイしています。次のレベルのパスワードを取得するには、レベル32 [ https://overthewire.org/wargames/bandit/bandit33.html ]で停止します。アクセスレベル32コマンド - パスワードはです。ssh [email protected] -p 222056a9bf19c63d650ce78e6ec0354ee45e

だからログインすると、UPERCASE SHELLという名前のシェルが表示されます。コマンドを受けて大文字に変換すると、「コマンドが見つかりませんエラー」が発生します。 $ SHELLを実行すると、「WELCOME TO UPPERCASE SHELL」というバナーのみが表示されます。だから3時間の間にきつくできなくなってグーグルをしてみました。それで、その人の一人が$ 0を入力し、その人はBourne Shellに行きました。それでは、$ 0と$ SHELLの違いは何ですか?

$ SHELLがデフォルトシェル[UPPERCASE_SHELL]であることがわかっているので、実行後に確認しましたcat /etc/paswd | grep bandit32。それでは、$0は何ですか? $ 0が現在シェルの場合は、[UpperCase]出力と同じバナーを取得する必要があります。 Bourne Shellにログインするにはどうすればよいですか?

結論。これら2つのシェル変数は何ですか?この状況では、彼らはどのように機能しますか?

ベストアンサー1

$SHELL興味深い変数だ。ほとんどのシェルはここにあなたの名前を含みます。ログインシェル(これは/etc/passwdで確認できます。)他のシェルインタプリタを起動しても自動的に変更されません。

たとえば、私のログインシェルはfish。さまざまなシェルがこれをどのように処理するかを見てみましょう$SHELL

$ set -e SHELL; bash -c 'echo $SHELL'
/usr/local/bin/fish
$ set -e SHELL; ksh -c 'echo $SHELL'
/bin/sh
$ set -e SHELL; zsh -c 'echo $SHELL'

$ set -e SHELL; dash -c 'echo $SHELL'

$ set -e SHELL; fish -c 'echo $SHELL'

set -e var変数をリセットする魚の方法です。

  • bashはSHELLをログインシェルに設定します。
  • ksh はデフォルトのシェルを使用します。
  • zsh、dash、fishはSHELLに特別な意味を持ちません。

だから$SHELL情報だけを提供する最大。私はそれがどのような魔法の価値を持っていると信じていません。


SHELLの値は実際には次のように与えられますlogin今後シェルが呼び出されます。私のMacの(BSD)マニュアルからlogin

ログインユーティリティは、ユーザーのホームディレクトリ(HOME)、コマンドシェル(SHELL)、検索パス(PATH)、端末タイプ(TERM)、およびユーザー名(LOGNAMEとUSER)を指定して、環境(environ(7)を参照)に情報を提供します。入力します。 。

おすすめ記事