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$

我不確定這是否是我係統上遇到的一些問題的原因。

我正在嘗試在我的系統上使用 Ruby 1.9.3,它是透過 Rbenv 安裝的。

rbenv version
1.9.3-p327

然而,當我嘗試安裝 gems 時,我收到一條錯誤訊息,指出它們至少需要 ruby​​ 1.9.2,因此我假設電腦仍在使用我的 Mac 附帶的 Ruby 版本。我嘗試透過以下方式解決這個問題

gem install bundle
rbenv rehash
bundle install

但我不斷收到關於至少需要 Ruby 1.9.2 的相同錯誤訊息,所以我想知道運行的效果是否exec $SHELL -l會因某種原因阻止 gems 安裝。

答案1

$SHELL指您的 shell(命令解釋器)。大多數 shell 識別–l(小寫 L)選項,表示它是一個“登入 shell”,這主要意味著它讀取並處理額外的命令檔案(例如,csh總是讀取.cshrc,但如果它是“登入shell”,它還會讀取.login)。您已經開始執行一個新的 shell 進程,並告訴它像「登入 shell」一樣運行。

一些 shell(我相信bash是一個)會追蹤分層 shell 進程並讓使用者顯示深度或層級。這通常會合併到 shell 提示字元中,如下所示:

 (提示字串)pwd
/dir1
 (提示字串)$SHELL
 (迅速的 2 細繩)cd ../dir2                # 注意shell級別是2,
 (迅速的 2 細繩)rm *                            # 表示您處於新的 shell 進程中。
 (迅速的 2 細繩)exit
 (提示字串)pwd                                   # 注意返回原來的shell進程。
/dir1

這應該與您的 RubyGems 問題沒有任何關係。

相關內容