![SSH에서 일부 명령을 찾을 수 없습니다](https://linux55.com/image/171263/SSH%EC%97%90%EC%84%9C%20%EC%9D%BC%EB%B6%80%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%B0%BE%EC%9D%84%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.png)
localhost에서 ssh를 통해 일부 명령을 실행하는 데 문제가 있습니다. Mac에서는 zsh를 사용하고 있습니다.
% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Library/TeX/texbin:/usr/local/munki:/opt/X11/bin:/opt/cisco/anyconnect/bin
% ssh localhost echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Library/TeX/texbin:/usr/local/munki:/opt/X11/bin:/opt/cisco/anyconnect/bin
% which docker
/usr/local/bin/docker
% ssh localhost which docker
docker not found
뭐가 문제인지 모르겠어서 시도해 보았지만 ssh -t
결과는 같았습니다.
편집하다:
댓글 감사합니다. 실제로는 다릅니다. 왜죠?
% ssh localhost printenv PATH
/usr/bin:/bin:/usr/sbin:/sbin
답변1
변수 해석은 코드가 실행되기 전에 명령줄에서 수행됩니다. 이스케이프나 작은따옴표를 사용하여 SSH 서버에 변수를 보낼 수 있습니다.
% echo $HOST
tabasco
% ssh mesquite echo $HOST
tabasco
% ssh mesquite "echo $HOST"
tabasco
% ssh mesquite 'echo $HOST'
mesquite
% ssh mesquite echo \$HOST
mesquite
% ssh mesquite "echo \$HOST"
mesquite
% ssh mesquite 'echo \$HOST'
$HOST
% printenv HOST
tabasco
% ssh mesquite printenv HOST
mesquite
(모든 호스트가 실제로 기본적으로 변수를 갖고 있는 것은 아닙니다 $HOST
. 예를 들어 BSD입니다.)