Windows에서 Red Hat Enterprise Linux 서버로 원격 Putty 세션을 실행하고 있습니다.
회사 제한으로 인해 Linux 사용자의 기본 셸을 bash에서 zsh로 변경할 수 없습니다. 대신에 읽기 전용 액세스 권한이 있습니다. ~./bash_profile
이 액세스 권한은 실행되고 ~/.bashrc
(읽기 전용 액세스 권한도 있음) ~/.bash_custom
쓰기 액세스 권한이 있는 곳에서 실행됩니다. 내부에서 ~/.bash_custom
zsh를 실행하여 쉘을 변경합니다.
zsh를 실행하는 줄을 포함하면 putty에서 제공하는 원격 명령이 실행되지 않습니다. zsh 실행을 주석 처리하면 제대로 작동하기 때문에 이것이 문제라는 것을 알고 있습니다.
내 zsh에는 putty에서 실행되는 원격 명령의 일부로 사용하려는 여러 별칭과 PATH 수정 사항이 있습니다. 실행을 위해 bash 쉘에서 zsh로 원격 명령을 전달하는 방법은 무엇입니까?
답변1
일부(가장 현재) 시스템에서는 ssh를 통해 실행할 때 비대화형 모드에서 실행 중일 때도(예: where running 1 문서를 실행하는 경우) 읽을 수 있도록 (및 해당 시스템 전체에서) bash
빌드 시 구성합니다. .bash
~/.bashrc
/etc
ssh some command
sshd
bash -c 'some command'
당신이 할 수 있는 일은 당신의 상단에 다음을 추가하는 것입니다 ~/.bash_custom
.
export SHELL="$(command -v zsh)" # tell everyone your preferred shell
case ${SSH_CONNECTION+s}:${-//[^ilc]}:$#:$SHLVL in
(s:c:0:1) exec zsh -c -- "$BASH_EXECUTION_STRING";;
(*:i:0:*) exec zsh;;
esac
bash가 by로 실행되면 zsh
동일한 코드를 사용하여 실행되고, bash가 대화식으로 실행되면 별도로 실행됩니다.bash -c 'some code'
sshd
zsh
두 번째 경우는 다음을 통해 bash가 로그인 셸로 호출되는 경우로만 제한할 수 있습니다.
if shopt -q login_shell; then
exec zsh
fi
및/또는 다음 으로 ssh
대체하여*:i:0:*
s:i:0:*
엄밀히 말하면 실행되어야 bash -c -- 'some command'
하지만 일부 쉘은 이를 지원하지 않기 때문에(또는 csh, fish, rc...와 같이 필요하지 않기 때문에) 지원하지 않습니다.