通过 ssh 运行命令时未获取 dot 文件

bzd*_*boo 12 bash ssh remote environment-variables

当我以交互方式运行我的程序时,它工作正常:

ssh somehost
$ ~/some/path/somescript.py
Run Code Online (Sandbox Code Playgroud)

当我直接通过 ssh 运行我的程序时,它不起作用。变量PYTHONPATH未设置,因为.bashrc不是来源。

ssh somehost ~/some/path/somescript.py
Run Code Online (Sandbox Code Playgroud)

如果我运行ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py',它工作正常。

但后者不适用于其他一些人,例如使用 tcsh 而根本没有~/.bashrc)。

在另一台适用于所有 shell 的主机上通过 ssh 运行一个东西命令是什么?

Gil*_*il' 12

没有为非交互式登录运行的标准每用户文件。您需要使程序自包含,以便它能够在不依赖非默认环境变量的情况下找到其依赖项,或者显式设置环境,通常使用

ssh somehost '. ~/.profile; exec ~/some/path/somescript.py'
Run Code Online (Sandbox Code Playgroud)

您不应该在 中设置环境变量.bashrc:此文件用于交互式 shell,并在 bash 的每个实例中读取。环境变量应该设置在.profile,登录时读取。 除了极少数人不使用 Bourne 风格的 shell 作为他们的登录 shell 之外,.profile确实适用于每个人,无论他们使用 bash 还是 zsh 或csh 或fish 交互。另请参阅 .bashrc 和 .bash_profile 之间的区别应该使用哪些设置文件来设置 bash 环境变量?.

话虽如此,每次您使用特定密钥通过 ssh 登录时,都有一种方法可以获取脚本。请参阅当通过 SSH 连接到主机时,有没有办法推送 shell 配置信息?, sh 通过 ssh 启动文件