테스트 명령 [ -t 1 ]
검사 떠들썩한 파티의 출력 단자에 있는지 여부. 이 줄의 의도는 터미널을 열 때 다른 bash 사용을 방해하지 않고 zsh를 분명히 실행하는 것입니다. 그러나 그것은 매우 나쁘게 이루어졌습니다.
.bashrc
세 가지 상황에서 파일 을 읽습니다.
- bash가 대화식 쉘로 실행될 때, 즉 배치 명령을 실행하지 않고 사용자가 입력 한 명령을 실행합니다.
- bash가 RSH 또는 SSH 데몬에 의해 실행되는 비 대화식 쉘인 경우 (일반적으로 실행
ssh host.example.com somecommand
하고 bash는의 로그인 쉘 이기 때문에 host.example.com
)
- 예를 들어 사용자가 명시 적으로 호출하면
.bash_profile
( bash의 시작 파일 선택은 약간 이상합니다 ).
[ -t 1 ]
대화식 쉘을 감지하는 나쁜 방법입니다. 터미널로 가지 않는 표준 출력으로 bash를 대화식으로 실행할 수는 있지만 드문 일입니다. 비 대화식 쉘에서 터미널로가는 표준 출력을 갖는 것이 더 일반적입니다. 비 대화식 쉘은 비즈니스가 실행 .bashrc
되지 않지만 불행히도 SSH가 호출 한 쉘을 bash합니다. 훨씬 더 좋은 방법이 있습니다. bash (및 다른 sh 스타일 쉘)는 신뢰할 수있는 내장 방법을 제공합니다.
case $- in
*i*) echo this shell is interactive;;
*) echo this shell is not interactive;;
esac
따라서“대화식 쉘인 경우 zsh를 시작하십시오”라고 작성해야합니다.
case $- in
*i*) exec zsh;;
esac
그러나 그것은 좋은 생각이 아닙니다 : bash 쉘을 열지 못하게하여 zsh를 사용하더라도 유용합니다. 이 블로그 게시물을 잊어 버리고 대신 bash 대신 zsh를 실행하도록 터미널을 여는 바로 가기를 구성하십시오. "Windows에서 Bash 응용 프로그램을 열 때마다 Zsh 쉘로 시작합니다": zsh를 원할 때 Zsh 응용 프로그램을 열도록 구성하지 마십시오.
bash
읽을 수 있습니다.bashrc
대화 형 (에서와 같은ssh host cmd
경우bash
호스트에있는 사용자의 로그인 쉘, 또는bash --login -c 'some code'
어디에.bash_profile
소스.bashrc
).case $- in *i*)...
쉘이 대화식인지 테스트하는 올바른 방법입니다.