터미널 응용 프로그램 (Mac)을 다시 시작하지 않고 터미널에서 bash를 다시 시작 하시겠습니까?


46

나는이 질문에 대한 대답을 둘러 보았지만 조금 찾지 못했습니다 (이상한 것).

내 질문은, Mac의 터미널 내에서 bash 세션을 다시 시작할 수있는 간단한 방법이 있습니까? 터미널 응용 프로그램을 닫고 다시 시작한 것처럼 동일한 동작을 원합니다 (모든 변수 재설정, .bash_profile 소스 등).

.bash_profile을 소싱하는 방법을 알고 있지만 그것이 원하는 것은 아닙니다. 내가하고 싶은 이유 중 하나는 내 bash 프롬프트 용 플러그인에 색상이 여러 번로드되지 않도록하는 코드가 있기 때문입니다. 따라서 .bash_profile을 소싱하면 색상 변수가 다시로드되지 않으며 변경 사항을 적용하려면 터미널 응용 프로그램을 다시 시작해야합니다.

답변:


64

exec bash 현재 쉘 프로세스를 (새로운 인스턴스) bash로 바꿔야합니다.


2
터미널 응용 프로그램의 bash는 exec bash대화 형 셸입니까? 그런 다음 대화 형 셸 만 다시 시작합니까? 또한 exec 명령의 기능과 옵션을 정확하게 설명 할 수 있습니까? 감사!
Mattias

exec는 현재 프로세스를 새로운 프로세스로 대체합니다. Bash는 매우 잘 작성되었지만 불행히도 맨 페이지 검색이 어렵습니다. 을 입력 man bash하고 문자열 SHELL BUILTIN COMMANDS의 마지막 인스턴스를 찾은 다음 아래로 스크롤하여 exec로 이동하십시오. 간단히 말해서, -c플래그를 전달하면 환경 변수 (귀하의 목적에 필요할 수 있음)없이 실행되며 다른 인수 -l 및 -a는 아마도 원하는 것이 아닙니다 (역사적 인 것처럼 보입니다) / 애매하고 구체적인 기능). 명령을 해제하면 exec를 사용하여 현재 셸에서 새 파일 설명자를 열 수 있습니다.
Muzer

현재 셸에서 새 파일 설명자를 여는 데 exec를 사용하는 방법의 예를 보여 줄 수 있습니까? 대화 형 / 로그인 쉘에 대한 내 질문은 어떻습니까? 쉘이 대화식 쉘로 터미널에서 실행되고 있으며 모든 exec 명령이 터치됩니다. 마지막으로, 질문의 승인 된 답변은 -l 플래그와 함께 exec 명령을 권장하지만 그 기능을 이해하지 못합니다. 너무 많은 질문에 대해 유감스럽게도, 내가 사용하는 명령을 이해하고 싶습니다.
Mattias

1
미안합니다 Mac에 대해서는 잘 모르겠지만 Linux 세계에서는 그래픽 터미널에서 실행되는 적어도 셸이 (일반적으로) 로그인 셸이 아니며, 터미널 자체 또는 로그인 셸이 아닌 대화식 셸만 다시 시작합니다. -l다음은 bash에 대한 인수이며 로그인 쉘처럼 작동하도록 만듭니다. 현재 쉘에서 파일 디스크립터를 여는 것은 질문과 관련이 없지만 exec 4<>test.txt예를 들어 파일 디스크립터를 test.txt를 가리 키도록 사용할 수 있습니다 . 그런 다음 나머지 쉘 echo test>&4에서 test.txt로 출력 할 수 있습니다 .
Muzer


1

수락 된 답변은 bash를 사용하는 쉘에 좋습니다.이 또한 OP가 요청한 것입니다. 그러나 기본 쉘이 아닌 쉘 (zsh)과 함께 macOS에서 터미널을 사용하고 명령을 실행하면 exec bash분명히 원하는 효과가 없습니다. : 기본 쉘 대신 bash를 시작합니다.

따라서 환경에 독립적 인 명령은 사용자의 기본 쉘을 저장하는 exec $SHELL환경 변수 $SHELL를 사용합니다.

또한, 노트는 애플이 맥 OS 카탈리나 zsh을 함께 떠들썩한 파티를 교체 조치 할 수 있도록 영업이 실행 중이 찾고있는 효과가 exec zshexec $SHELL맥 OS 10.15로 업데이트 한 후 이동하는 방법이 될 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.