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

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

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

ssh somehost
$ ~/some/path/somescript.py

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

ssh somehost ~/some/path/somescript.py

如果我跑步ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py',效果很好。

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

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

答案1

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

ssh somehost '. ~/.profile; exec ~/some/path/somescript.py'

您不应该在 中设置环境变量.bashrc:该文件适用于交互式 shell,并在每个 bash 实例中读取。环境变量应该在 中设置.profile,当你登录时会读取它。除了极少数不使用 Bourne 风格的 shell 作为登录 shell 的人之外,它对.profile每个人都适用,无论他们使用 bash 还是 zsh 或者交互地使用 csh 或 Fish。也可以看看 .bashrc 和 .bash_profile 之间的区别, 应该使用哪些设置文件来使用 bash 设置环境变量?

话虽这么说,有一种方法可以在您每次使用特定密钥通过 ssh 登录时获取脚本。看有没有办法在 SSH 连接到主机时推送 shell 配置信息?,通过 ssh 的 sh 启动文件

答案2

我遇到了同样的问题,但对我来说解决方案不同。我的用户未配置为使用 bash 作为 shell,而是使用 zsh 作为 shell,因此 bash 点文件在登录时不会运行。使用文本编辑器打开 /etc/passwd 并查找您的用户名及其使用的 shell:

root:x:0:0:root:/root:/bin/zsh

这就是我的用户条目的样子。请注意,它显示的是 /bin/zsh 而不是 /bin/bash。对于 zsh,正确的点文件是 ~/.zprofile。每次您使用 ssh 登录时都会运行其内容。

相关内容