有些指令在 ssh 上找不到

有些指令在 ssh 上找不到

我在 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。)

相關內容