为什么在没有可视化终端的情况下通过 SSH 执行命令会使用不同的 PATH 位置?

为什么在没有可视化终端的情况下通过 SSH 执行命令会使用不同的 PATH 位置?

当执行 SSH 会话时,该会话仅启动命令而不是实际连接您,似乎我的 PATH 环境变量与正常连接到 SSH 会话时不同,并且缺少 bash 命令的二进制文件的位置。为什么会这样,我该如何避免?

正常连接:ssh root@host 产生 PATH 环境

PATH='/sbin:/usr/sbin:/proc/boot'

ssh 执行命令但不直接连接到终端 (ssh root@host ls) 会产生“ls:未找到命令”。进一步检查后发现,PATH 环境变量缺少 /proc/boot,因此缺少 ls 二进制文件的位置。

这个“非终端”会话的 PATH 环境产生:

PATH='/usr/sbin:/sbin'

但不是 /proc/boot,所以它不能调用标准操作,如 ls、mkdir 等。

这是为什么?当仅通过 SSH 执行命令而不是直接连接到显示的终端时,如何获取正确的 PATH?

答案1

因为根据会话的类型(登录/非登录,交互式/非交互式),您的 .profile 或 .bashrc 是否会被考虑在内。

要区分不同类型的 shell,请参阅这里

相关内容