exec $SHELL -l は何をしますか?

exec $SHELL -l は何をしますか?

偶然、私はコマンドを実行しました

exec $SHELL -l

ターミナルでプロンプトの見た目が変わりました

Macintosh:~ myname$ exec $SHELL -l
Macintosh-2:~ myname$ cd

つまり、Macintoshの後に「-2」が付くのです

Macintosh:~ myname$
Macintosh-2: myname$

これが私のシステムで発生しているいくつかの問題の原因であるかどうかはわかりません。

Rbenv を使用してインストールしたシステムで Ruby 1.9.3 を使用しようとしています。

rbenv version
1.9.3-p327

しかし、gemをインストールしようとすると、少なくともruby 1.9.2が必要であるというエラーメッセージが表示されるので、マシンはまだMacに付属しているRubyのバージョンを使用していると思われます。私は次のようにしてこれを修正しようとしました。

gem install bundle
rbenv rehash
bundle install

しかし、少なくとも Ruby 1.9.2 が必要であるという同じエラー メッセージが引き続き表示されるため、実行の影響でexec $SHELL -l何らかの理由で gem がインストールされないのではないかと考えています。

答え1

$SHELLは、シェル (コマンド インタープリタ) を指します。ほとんどのシェルは、–l(小文字の L) オプションを「ログイン シェル」として認識します。これは主に、追加のコマンド ファイルを読み取って処理することを意味します (たとえば、csh常に を読み取ります.cshrcが、「ログイン シェル」の場合は も読み取ります.login)。新しいシェル プロセスの実行を開始し、「ログイン シェル」のように動作するように指示しました。

いくつかのシェル (1 つだと思いますbash) は、階層的なシェル プロセスを追跡し、ユーザーが深さまたはレベルを表示できるようにします。これは、次のようにシェル プロンプトに組み込まれることがよくあります。

 (プロンプト文字列)pwd
/dir1
 (プロンプト文字列)$SHELL
 (プロンプト 2 弦)cd ../dir2                # シェルレベルは2
 (プロンプト 2 弦)rm *                            # 新しいシェル プロセスにいることを示します。
 (プロンプト 2 弦)exit
 (プロンプト文字列)pwd                                   # 元のシェル プロセスに戻ることに注意してください。
/dir1

これは RubyGems の問題とは何の関係もありません。

関連情報