为什么 ssh 主机回显 $PATH 并在 ssh 进入机器后打印 $PATH 会给出不同的结果?

Pro*_*oob 8 shell bash ssh path environment-variables

在特定主机上,当我 ssh 进入机器并输入时,echo $PATH我得到

/home/wxy/bin64:/home/wxy/bin:/usr/kerberos/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin
Run Code Online (Sandbox Code Playgroud)

如果我执行ssh host 'echo $PATH'我看到这个:

/usr/local/bin:/bin:/usr/bin
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种差异?

如果我想使用后一个命令查看前一个结果,我该怎么办?

slm*_*slm 13

在第一个场景中,您正在登录系统,因此您正在执行所谓的登录类型的连接。登录源中的脚本$HOME/.bashrc$HOME/.bash_profile如果您是登录 shell,则是 Bash。这 2 个脚本通常依次提供文件/etc/bashrc/etc/profile.d/*.sh.

对于第二种情况,您只是在采购文件$HOME/.bashrc. 这种类型的登录称为交互

您可以在bash 手册页INVOCATION部分阅读有关这些内容的更多信息。

要更改此行为,您可以包含 $HOME/.bashrc_profile 作为交互式执行的一部分以获得所需的行为:

$ ssh user@remotehost '. $HOME/.bash_profile; echo $PATH'
Run Code Online (Sandbox Code Playgroud)

-或者-

$ ssh user@remotehost 'source $HOME/.bash_profile; echo $PATH'
Run Code Online (Sandbox Code Playgroud)

参考