bash에서 zsh로 SSH 원격 명령 전달

bash에서 zsh로 SSH 원격 명령 전달

Windows에서 Red Hat Enterprise Linux 서버로 원격 Putty 세션을 실행하고 있습니다.

회사 제한으로 인해 Linux 사용자의 기본 셸을 bash에서 zsh로 변경할 수 없습니다. 대신에 읽기 전용 액세스 권한이 있습니다. ~./bash_profile이 액세스 권한은 실행되고 ~/.bashrc(읽기 전용 액세스 권한도 있음) ~/.bash_custom쓰기 액세스 권한이 있는 곳에서 실행됩니다. 내부에서 ~/.bash_customzsh를 실행하여 쉘을 변경합니다.

zsh를 실행하는 줄을 포함하면 putty에서 제공하는 원격 명령이 실행되지 않습니다. zsh 실행을 주석 처리하면 제대로 작동하기 때문에 이것이 문제라는 것을 알고 있습니다.

내 zsh에는 putty에서 실행되는 원격 명령의 일부로 사용하려는 여러 별칭과 PATH 수정 사항이 있습니다. 실행을 위해 bash 쉘에서 zsh로 원격 명령을 전달하는 방법은 무엇입니까?

답변1

일부(가장 현재) 시스템에서는 ssh를 통해 실행할 때 비대화형 모드에서 실행 중일 때도(예: where running 1 문서를 실행하는 경우) 읽을 수 있도록 (및 해당 시스템 전체에서) bash빌드 시 구성합니다. .bash~/.bashrc/etcssh some commandsshdbash -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'sshdzsh

두 번째 경우는 다음을 통해 bash가 로그인 셸로 호출되는 경우로만 제한할 수 있습니다.

if shopt -q login_shell; then
  exec zsh
fi

및/또는 다음 으로 ssh대체하여*:i:0:*s:i:0:*


엄밀히 말하면 실행되어야 bash -c -- 'some command'하지만 일부 쉘은 이를 지원하지 않기 때문에(또는 csh, fish, rc...와 같이 필요하지 않기 때문에) 지원하지 않습니다.

관련 정보