Zsh를 사용한 SSH "명령을 찾을 수 없음"

Zsh를 사용한 SSH "명령을 찾을 수 없음"

클라이언트와 서버에서 Zsh를 사용하고 있습니다. SSH를 사용하여 원격 서버에서 명령을 실행하면 바이너리를 찾을 수 없습니다.

ssh gt "cd /home/****/app/staging && bundle exec rake db:migrate RAILS_ENV=staging"
zsh:1: command not found: bundle

대화형 셸을 사용하여 SSH를 사용하면 동일한 명령을 정상적으로 실행할 수 있습니다.

서버에서 $PATH.zshrc 및 .zshenv로 설정

편집하다

bundle서버의 $PATH에 없는 것 같습니다 . 아마도 이는 RVM(Ruby Version Manager) 연결과 관련이 있을 수 있으므로 파일이 포함된 디렉터리 로 이동 cd하면 Ruby 환경이 설정되고 $PATH에 추가됩니다. 비대화형 쉘도 이 후크를 트리거하는지 알아내야 합니다 .cd.rvmrcbundlecd

답변1

바이너리가 있는 경로가 $PATH변수 에 추가되었을 수 있습니다.로그인할 때. 제공된 명령을 실행하면 해당 명령이 전달됩니다.로그인하지 않았습니다껍데기. 이 문제를 해결하는 가장 간단하고 안전한 방법은 이 경우 전체 경로를 지정하는 것입니다.

답변2

@rozcietrewiacz의 의견을 찬성했지만 완전한 답변으로 만들고 싶었습니다. (이미 두 개의 도트 파일을 설정한 게시자에게는 도움이 되지 않지만, 저처럼 버그를 기반으로 이 질문을 발견한 사람들에게는 도움이 될 것이라고 생각합니다.)

zsh대화형 로그인에 대해 읽고 .zshenv사용 되지만 비대화형 로그인에만 해당됩니다. 이 문제 를 해결하려면 my에서 PATH 설정을 분리하고 ..zshrc.zshenv.zshrc.zshenv

hg내 경우에는 내 경로(및 자체)가 서버에 설정 되어 있기 때문에 SSH를 통해 다른 서버와 통신하는 Mercurial 명령을 실행할 수 없었습니다 ..zshrc

자세한 내용을 확인하실 수 있습니다여기그리고여기.

답변3

그 이유는 여기 PATH 때문입니다.

두 개의 쉘에서 하나씩 수행 하세요 which bundle. 설명이 필요합니다! PATH 변수를 편집하여 필요에 따라 내보내거나 절대 경로를 사용할 수 있습니다.

관련 정보