[-t 1]은 무엇을 점검합니까? 좋습니다 .bashrc. # Launch Zsh if [ -t

방금 Windows에서 시작할 zsh때 시작하는 방법을 찾았습니다.bash

https://www.howtogeek.com/258518/how-to-use-zsh-or-another-shell-in-windows-10/ .

마지막에 다음 코드를 추가하는 것이 좋습니다 .bashrc.

# Launch Zsh
if [ -t 1 ]; then
exec zsh
fi

무슨 [ -t 1 ]뜻입니까?

그냥 사실입니까?

그럼 내가 할 수 있을까?

exec zsh


답변

[]바로 가기입니다 test.

에 따르면 man test:

-t FD
FD가 터미널과 연관된 파일 설명자인 경우에 해당됩니다.

따라서 bash를 대화식 쉘 (터미널- 용어 설명 은 스레드 참조 )로 실행하면 bash는 zsh로 대체됩니다.

.bash * 파일에 대한 추가 정보 :

bash가 대화식 로그인 쉘 또는 –login 옵션 을 사용하는
비 대화식 쉘로 호출 되면 파일이 존재하는 경우 먼저 / etc / profile 파일에서 명령을 읽고 실행합니다. 해당 파일을 읽은 후 ~ / .bash_profile, ~ / .bash_login 및 ~ / .profile을 순서대로 찾아서 존재하고 읽을 수있는 첫 번째 명령을 읽고 실행합니다. 이 동작을 막기 위해 쉘을 시작할 때 –noprofile 옵션을 사용할 수 있습니다.

로그인 쉘의 종료는 , bash는 읽기 및 파일에서 실행하는 명령 ~ / .bash_logout 및 /etc/bash.bash_logout, 파일이 존재하는 경우.

로그인 쉘이되지 않는 대화 형 쉘 시작은, bash는 읽기 및 실행하는 명령에서 ~은 / .bashrc에 해당 파일이 존재하는 경우. –norc 옵션을 사용하여이를 방지 할 수 있습니다. –rcfile 파일 옵션은 bash가 ~ / .bashrc 대신 파일에서 명령을 읽고 실행하도록합니다.

스테판 Chazelas가 코멘트 :
쉘은 표준 출력 터미널을하지 않고 대화 할 수 있으며, 쉘은 표준 출력에 터미널 (언제나처럼의 출력을 파이프 / 리디렉션하지 않고 터미널 내에서 스크립트를 실행), 및 비 – 상호 작용 될 수 있음을 참고 bash.bashrc대화식이 아닌 경우에도 읽습니다 ( 호스트에서 사용자의 로그인 쉘이있는 ssh host cmd위치 bash또는 bash --login -c 'some code'). case $- in *i*)...쉘이 대화식인지 테스트하는 올바른 방법입니다.


답변

테스트 명령 [ -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 응용 프로그램을 열도록 구성하지 마십시오.


답변

남자 1 테스트 :

-t FD

터미널에서 파일 디스크립터 FD가 열린다

내 예 실행한다 (대체한다,이 경우, 처리를 실행하는 bash)와 zsh경우에 표준 출력은 단자 (안 등의 파일 / 파이프 /)에 개방된다.