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). 새로운 쉘 프로세스 실행을 시작하고 "로그인 쉘"처럼 작동하도록 지시했습니다.

일부 셸(내 생각 bash엔)은 계층적 셸 프로세스를 추적하고 사용자가 깊이나 수준을 표시할 수 있도록 합니다. 이는 다음과 같이 쉘 프롬프트에 통합되는 경우가 많습니다.

 (프롬프트 문자열)pwd
/dir1
 (프롬프트 문자열)$SHELL
 (즉각적인 2 끈)cd ../dir2                # 쉘 레벨은 다음과 같습니다.2,
 (즉각적인 2 끈)rm *                            # 새로운 쉘 프로세스에 있음을 나타냅니다.
 (즉각적인 2 끈)exit
 (프롬프트 문자열)pwd                                   # 원래의 쉘 프로세스로 돌아가는 것을 참고하세요.
/dir1

이는 RubyGems 문제와 관련이 없어야 합니다.

관련 정보