원격 Debian 서버 시스템에 다음을 호출하여 명령을 실행하려는 스크립트가 있습니다.
ssh server "find.sh"
내 거find.sh스크립트는 다음 위치에 있습니다.
/home/user/bin
먼저, 나는 달렸다SSH 서버 "echo $PATH"다음 경로로 응답합니다.
/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
따라서 PATH 변수는 괜찮은 것처럼 보이지만 작동하지 않습니다. 작동하게 할 수 있는 유일한 방법은 전체 경로를 호출하는 것입니다.
ssh server "/home/user/bin/find.sh"
전체 경로를 지정하지 않고 쉽게 작동시킬 수 있는 방법이 있습니까?
답변1
대상 서버의 파일 $PATH
에서 파일 시작 부분에 정의해야 합니다 ~/.bashrc
.
export PATH=$PATH:/home/user/bin
https://stackoverflow.com/questions/940533/how-do-i-set-path-such-that-ssh-userhost-command-works:
Bash는 비대화형 모드에서 ~/.bashrc 파일을 읽습니다.
답변2
ssh server "echo $PATH"
다양한 작동 모드 ssh server "find.sh"
. 첫 번째는 쉘 메타 문자(특히 공백)를 포함하므로 "sh -c 'specified_command')"에 의해 실행되고 두 번째는 그렇지 않으므로 "exec('specified_command')"에 의해 실행됩니다. 차이점은 미묘하지만 이 경우(환경 변수를 설정하는 쉘이기 때문에) 예상하지 못한 부작용이 있을 수 있습니다.
다음과 같은 작업을 수행하여 쉘을 강제로 실행할 수 있습니다.ssh server 'bash -c "find.sh"'
답변3
입력이 로컬로 확장 ssh server "echo $PATH"
됩니다 PATH
. 따라서 실제로 실행하는 명령은 이며 , 서버는 서버 측에 있는 내용 ssh server "echo /home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
에 관계없이 이를 수신할 때마다 동일한 출력을 생성합니다 . 서버 측에서 확장 PATH
하려면 대신 :을 사용할 수 있습니다. 로컬 확장을 방지하기 위해 작은따옴표가 사용된다는 점에 유의하세요 .PATH
ssh server 'echo "$PATH"'
$PATH