
ローカルホストで 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 など)。