방금 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
경우에 표준 출력은 단자 (안 등의 파일 / 파이프 /)에 개방된다.