当执行 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,请参阅这里。