--login을 사용할 때 bash.exe가 두 번 실행되는 이유는 무엇입니까?

--login을 사용할 때 bash.exe가 두 번 실행되는 이유는 무엇입니까?

cygwin을 실행할 때 사용하는 단축키는 다음과 같습니다.

C:\cygwin\bin\bash.exe --login -i

bash.exe가 왜 두 번 실행되는지 잘 모르겠습니다. 작업 관리자에서 두 개의 프로세스가 실행 중인 것을 볼 수 있습니다. echo .Bashrc file has been processed파일 하단에 echo 문을 배치하면 .bashrc콘솔 창에 echo 출력이 두 번 나타나는 것을 볼 수 있습니다.

여기에 이미지 설명을 입력하세요.

bash.exe --login프로세스가 두 번 실행되는 원인은 무엇입니까 ? (이것이 예상된 동작입니까?)

답변1

bash로그인 쉘인 쉘은 ~/.bash_profile.

Marcel의 Cygwin 시스템에 있는 파일에는 ~/.bash_profile다음 줄이 포함되어 있습니다.

[[ -z $SSH_AGENT_PID && -z $DISPLAY ]] && exec -l ssh-agent $SHELL -c "bash --login"

ssh-agent현재 쉘 환경에서 해당 에이전트가 실행되고 있지 않고 X11 디스플레이를 사용할 수 없는 경우 이 작업이 시작됩니다. SSH 에이전트는 bash비대화형 쉘과 로그인 쉘이라는 두 개의 새로운 쉘을 시작합니다(로그인 쉘은 이미 $SSH_AGENT_PID설정되어 있으므로 위 줄을 건너뜁니다). SSH 에이전트는 로 시작하는 셸을 대체합니다 exec.

bash볼 수 있는 두 가지 프로세스는 다음과 같습니다.

  1. ssh-agent(이것은 ) 로 $SHELL -c시작하고 ,
  2. $SHELL -c하나는 , 호출 로 시작합니다 bash --login.

나에게 이 줄은 다음과 같이 단순화될 수 있는 것처럼 보입니다.

[[ -z $SSH_AGENT_PID && -z $DISPLAY ]] && exec -l ssh-agent bash --login

ssh-agent이렇게 하면 단지 실행을 위한 추가 쉘이 제거됩니다 bash --login.

답변2

@Kusalananda는 트리거 .bash_profile이 호출된다는 점을 지적했습니다 --login. 내 .bash_profile에는 다음 줄이 있습니다

[[ -z $SSH_AGENT_PID && -z $DISPLAY ]] && exec -l ssh-agent $SHELL -c "bash --login"

그래서 매번 두 번째 카니발이 시작됩니다.

관련 정보