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 时遇到的问题无关。

相关内容