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です。)