SSH 가 원 격 서버 에 연결 하여 command 를 직접 실행 할 때 PATH 설정 이 완전 하지 않 은 솔 루 션
3629 단어 command
오늘 은 자신의 desktop 과 laptop 사이 에서 코드 를 동기 화 하 는 구체 적 인 설정 을 괴 롭 혔 는데 그렇게 순 조 롭 지 못 할 줄 은 몰 랐 다.
git remote add desktop [email protected]:/desktop/repo/path/.git
git checkout -b from-desktop # create a new branch to receive the modification from desktop
git pull desktop from-desktop # fetch from the desktop and merge it to the branch from-desktop
컵 이 마지막 단 계 를 실 행 했 을 때 git - upload - pack command not found 라 는 오류 가 발생 했 습 니 다.그래서 git pull 도 성공 하지 못 했 습 니 다.힌트 상 git - upload - pack 을 찾 을 수 없 으 며, PATH 에 git - upload - pack 이 있 는 경로 가 없 는 것 으로 추정 된다.git 는 회사 의 통 일 된 표준 설치 경로 이기 때문에 which 를 사용 합 니 다. git - upload - pack 에서 특수 한 경로 / copany / set / path 에서 확인 하 였 습 니 다.
위의 git reote add 명령 에는 git 가 사용 할 프로 토 콜 이 지정 되 어 있 지 않 습 니 다. 기본적으로 ssh 를 사용 합 니 다.이러한 분석 은 문제 가 ssh 원 격 실행 명령 에 있다 는 것 을 설명 한다.
Laptop ssh 에서 desktop 까지 echo $PATH 를 실행 하 였 으 며, PATH 에는 / copany / set / path 라 는 경로 가 정상적으로 포함 되 어 있 음 을 발견 하 였 습 니 다.
물 러 난 후 ssh 를 통과 합 니 다[email protected]'echo $PATH' 는 PATH 변 수 를 봅 니 다. 이 때 는 역시 / copany / set / path 를 포함 하지 않 습 니 다.
문 제 는 기본적으로 이곳 의 차이 때 문 이라는 것 을 알 게 되 었 다. 그런데 왜 이런 차이 가 있 을 까?
Desktop 에 있 는. bash프로필 설정 은 매우 간단 합 니 다. 바로 아래 에 있 는 것들 입 니 다.
if [ -f $HOME/.profile ]; then
. $HOME/.profile
fi
if [ -f $HOME/.bashrc ]; then
. $HOME/.bashrc
fi
두 가지 이론 적 으로 모두 이 프로필 을 실 행 했 습 니 다. 제 $HOME 아래 에 'bashrc' 설정 만 있 습 니 다. (PATH 에 대한 약간의 설정 과 export 는 'bashrc' 에 있 습 니 다. 그 중에서 'copany / set / path' 를 포함 합 니 다. 그래서 두 가 지 는 똑 같은 경 로 를 가 야 합 니 다. 이치 에 맞지 않 습 니 다. 한 경로 에 있 습 니 다. 한 경로 에 없 습 니 다.
한참 을 찾다 가 마침내. bashrc 의 첫 줄 에서 이 말 을 알 아 차 렸 다.
# If not running interactively, don't do anything
[ -z "PS1" ] && return
문득 크게 깨 달 았 다, 원흉 이 야!
Linux 시스템 에서 자주 사용 되 는 인 터 랙 티 브 셸 여 부 를 판단 하 는 방식 은 PS1 변 수 를 통 해 다른 방식 이 있 지만 현재 bashrc 에 서 는 PS1 을 통 해 인 터 랙 티 브 모드 인지 여 부 를 판단 하 는 것 입 니 다.
ssh 프로 토 콜 을 통 해 Desktop 에 로그 인 했 을 때 Laptop 에 tty 터미널 을 열 었 습 니 다. interactive mode 에 속 하기 때문에 위의 줄 은 return 논리 에 들 어가 지 않 고 전체. bashrc 가 실 행 될 것 입 니 다. 그래서 PATH 에는 설 정 된 모든 관건 적 인 경로 가 포함 되 어 있 습 니 다.(N 다 export 의 PATH 는 모두. bashrc 의 끝 에 놓 여 있 습 니 다)
하지만 [email protected]'command' 는 전형 적 인 non - inteactive shell 이기 때문에 'bashrc 파일' 도 실 행 했 지만 처음부터 return 논리 에 들 어가 되 돌 아 왔 기 때문에 파일 밑 에 있 는 PATH 에 대한 export 는 적용 되 지 않 았 습 니 다.그래서 시작 컵 이 생 겼 어 요.
근본 적 인 문 제 를 찾 으 면 해결 방안 이 있 습 니 다. 필요 한 export PATH 의 성명 을 모두 [- z "PS1"] & & return 이전 으로 옮 깁 니 다.non - interactive mode 에서 도 PATH 설정 이 적 용 됩 니 다.
Laptop 에서 git pull desktop from - desktop 을 다시 실행 합 니 다. 모든 수정 이 성공 적 으로 merge 되 어 Laptop 의 from - desktop 분기 에 문제 가 해결 되 었 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
peco의 쉽고 편리한 사용법가자. | peco 를 사용하여 검색한 파일/디렉토리에 cd, ls, rm, cat, vim 한다. 각각 별칭으로 쉽게 사용할 수 있도록 한다. lsp, vimp, catp 등도 마찬가지로 검색해, 각각의 액션을 실...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.