如何确保 SSH 远程 BASH shell 包含所有 PATH 元素

如何确保 SSH 远程 BASH shell 包含所有 PATH 元素

因此,我试图在 ssh 上远程运行一个脚本,但是ssh remote "~/bin/some_script.sh"问题是,vcs当我尝试通过 ssh 发送命令时,该脚本运行的命令似乎无法加载,而不是通过 ssh 进入远程并手动执行该命令。

为了清楚起见,当我尝试时会出现以下输出

$ ssh remote "cd/...; vcs -x -...;"
bash: vcs: command not found

但当我这样做时它有效

$ ssh remote
remote$ vcs -x -...
remote$ //good output

我对此进行了更深入的研究,当我简单地运行

$ ssh remote "compgen -c | wc -l"
2611

对比

$ ssh remote
remote$ compgen -c | wc -l
3735

因此,当我仅通过 ssh 传递命令时,显然有很多命令没有被“加载”,而当我实际通过 ssh 进入远程并执行命令时则不然。知道发生了什么吗?如何克服这个问题?

答案1

答案2

跑步会打开ssh remote "command"非交互式shell,因此它在打开时不会获取常规文件。我深入研究后发现,在非交互模式下运行时显然$PATH缺少一些文件。我的解决方案是在运行脚本时获取必要的文件夹/binsssh remote "~/bin/some_script.sh"

#!/bin/bash
. /etc/.../sourced_script.sh
# script

唯一的缺点是您必须记住在要远程运行的每个脚本中都引用此脚本。也许有一个更优雅的解决方案,您可以将其添加. /etc/.../sourced_script.sh到非交互式 shell 的启动脚本中,但我的新手经验不知道是否有非交互式 shell 的启动脚本。

相关内容