
Ich habe Probleme, einige Befehle über SSH im lokalen Host auszuführen. Ich verwende Zsh auf dem Mac:
% 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
Ich weiß nicht, was hier falsch sein könnte, habe es versucht, ssh -t
aber mit dem gleichen Ergebnis.
BEARBEITEN:
Danke für die Kommentare, es ist tatsächlich anders, warum ist das so?
% ssh localhost printenv PATH
/usr/bin:/bin:/usr/sbin:/sbin
Antwort1
Die Variableninterpretation erfolgt auf der Kommandozeile, bevor Code ausgeführt wird. Sie können die Variable an den SSH-Server senden, indem Sie sie maskieren oder in einfache Anführungszeichen setzen, z. B.
% 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
(Beachten Sie, dass nicht alle Hosts standardmäßig über eine $HOST
Variable verfügen. BSD beispielsweise.)