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