[-t 1] 무엇을 확인해야 합니까?

[-t 1] 무엇을 확인해야 합니까?

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

답변1

[]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 file 옵션은 bash가 ~/.bashrc 대신 파일에서 명령을 읽고 실행하도록 강제합니다.

스티븐 차제라스(Stephen Chazeras)는 다음과 같이 말했습니다.
쉘은 stdout이 터미널이 되지 않고도 상호 작용할 수 있고 쉘은 stdout에서 비대화식으로 터미널과 상호 작용할 수 있습니다(예: 출력 bash.bashrc(예: 사용자의 로그인 쉘이 있는 호스트 시스템에서 ssh host cmd) 쉘이 대화형인지 테스트하는 올바른 방법입니다.bashbash --login -c 'some code'case $- in *i*)...

답변2

이것테스트 명령 [ -t 1 ]bash 출력이 터미널에 있는지 확인하십시오. 이 줄의 목적은 터미널이 열려 있을 때 다른 bash 사용을 방해하지 않고 zsh를 실행하는 것입니다. 그러나 그것은 끔찍하게 이루어졌습니다.

파일은 .bashrc세 가지 상황에서 읽혀집니다.

  • Bash가 대화형 셸로 실행되면 일괄 명령을 실행하는 대신 사용자가 입력한 명령을 실행합니다.
  • 배쉬가 있을 때비대화형RSH 또는 SSH 데몬에 의해 실행되는 쉘(일반적으로 실행 중이고 ssh host.example.com somecommandbash가 로그인 쉘이기 때문입니다 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 애플리케이션을 엽니다.

답변3

사람 1 테스트:

-tFD

파일 설명자 FD가 터미널에서 열립니다.

귀하의 예제는 on if를 사용하여 실행됩니다(이 경우 실행 중인 프로세스 교체 bash).zsh표준 출력터미널에서 엽니다(파일/파이프 등이 아님).

관련 정보