일부 ATM 기계에서 이상한 동작이 발생합니다. 적어도 나와 내 동료에게는 이상해 보였고 아무런 설명도 찾지 못했습니다. :)
[편집 1]
다음 단락이 잘못된 것 같습니다. 마지막 편집 2를 참조하세요.
여기서는 bash와 zsh를 사용합니다. 따라서 ssh login@host
zsh를 기본 쉘로 사용하도록 구성된 일부 zsh-default-machines(plain) 에 SSH를 통해 연결할 때 chsh -s /usr/bin/zsh
이후에 열리는 쉘은 대화형이지만 대화형입니다.로그인하지 않았습니다해당 컴퓨터에 이미 로그인되어 있는지 여부에 관계없이 쉘.
내 이해에 따르면 SSH를 통해 컴퓨터에 연결하면 해당 컴퓨터에서 새로운 사용자 세션이 시작되어야 하므로 필요한 셸은 로그인 셸입니다. zsh도 이와 같아야 하지 않나요?
컴퓨터의 기본 쉘을 bash로 변경하는 경우 로그인 쉘을 사용하여 컴퓨터에 로그인하십시오.
이것이 zsh의 정상적인 동작입니까? 변경될 수 있나요? 아니면 일부 구성 오류입니까?
[/편집1]
[편집 2] 좋습니다. ZSH 문서에 따르면 로그인 셸인지 쉽게 테스트할 수 있습니다.
$ if [[ -o login ]]; then; print yes; else; print no; fi
바라보다:http://zsh.sourceforge.net/Guide/zshguide02.html
그러나 zsh man 항목/문서로 인해 zsh는 소스를 사용하여 /etc/profile
스크립트를 가져와야 합니다 /etc/profile.d/*.sh
. 위의 문제는 스크립트가 다음과 같다는 사실에서 비롯됩니다.아니요소스이므로 대부분의 환경 변수 및 시스템 구성 항목이 올바르게 초기화되지 않았습니다. 그러나 위에서 언급한 것처럼 bash를 기본 셸로 사용하고 /etc/profile
profile.d 폴더의 스크립트가 소스로 사용되는 경우입니다.
[/편집2]
[편집 3 - 답변] 아래 댓글에 답변을 주신 @StéphaneChazelas에게 감사드립니다! 소싱은 zsh
/compatibility 모드에서 실행될 때만 발생하는 것 같습니다 /etc/profile
(해당 man 항목 참조).sh
ksh
https://linux.die.net/man/1/zsh). SSH를 통해 로그인하면 이 호환 모드가 실행되지 않으므로 반드시 자체적으로 획득할 zsh
필요는 없지만 [/edit 3]을 통해 실행 해야 합니다./etc/profile
.zprofile
시스템: 운영 체제: Ubuntu 18.04 zsh-5.4.2, omz 및 일부 플러그인이 활성화되었습니다.
감사합니다!
답변1
답변2
sshd
클라이언트가 실행할 명령을 보내지 않은 경우 로그인 쉘을 실행합니다. 이는 실행 명령이 제공되지 않을 때의 동작이 아닌 rsh
서비스를 호출하는 동작을 모방하기 위한 것입니다 .rlogind
rshd
rlogind
또는 login
와 같은 로그인 쉘임을 쉘에 알리려면 telnetd
로 sshd
쉘을 시작하십시오 .argv[0]
-
아니면 물론 zsh
다른 모든 쉘도 마찬가지로 이를 이해합니다. 그렇지 않으면 절대로 호출할 수 없습니다.로그인모델.
여기서 로그인 쉘이 안 나오는 것 같은 증상은 /etc/profile
설명이 없기 때문입니다.
/etc/profile
Bourne Shell과 유사한 로그인 세션 초기화 파일입니다. 구문은 Bourne 쉘 구문(또는 Bourne 쉘이 현재 거의 사용되지 않으므로 POSIX sh 구문일 수도 있음)일 것으로 예상되며, 로그인 시 모든 구문은 (대부분) Bourne 또는 POSIX sh 구문과 역호환됩니다.
csh
그리고 tcsh
완전히 다른 구문을 사용합니다 /etc/csh.login
. fish
사용됨 /etc/fish/config.fish
(로그인 모드인지 여부)
zsh
의 구문은 Bourne/POSIX와 완전히 호환되지 않으므로 기본적으로 를 읽지 않습니다 /etc/profile
. 로그인 모드의 구성 파일은 입니다 /etc/zsh/zprofile
(또는 빌드 시 구성 방법 /etc/zprofile
에 따라 다름 ) .zsh
/etc/zsh/zlogin
/etc/zlogin
zshrc
zsh
소스는 에뮬레이션 또는 에뮬레이션 /etc/profile
할 때만 제공 되며 , 이 경우 구문은 기본 에뮬레이션 모드보다 POSIX sh의 구문에 더 가깝습니다 .sh
ksh
zsh
로그인 모드에서 zsh
소스를 얻으 려면 추가해야 합니다 /etc/profile
. source /etc/profile
단, 의 구문과 해당 파일이 소스로 사용되는 다른 모든 파일이 의 구문과 호환되는지 확인한 경우에만 해당됩니다 /etc/zsh/zprofile
./etc/profile
zsh
또는 다음을 추가할 수 있습니다.
emulate sh -c 'source /etc/profile'
도착하다 /etc/zsh/zprofile
. 그런 다음 에뮬레이션 모드에서 가져 /etc/profile
옵니다 sh
(그리고 그 안에 선언된 함수도 에뮬레이션 모드로 유지됩니다 sh
).