可能的重复:
通过 ssh 运行命令时未获取点文件
这是上一篇的延续。我的问题通过 ssh 运行命令时未获取点文件(我无法在原始帖子中添加足够的信息,因为它只允许 600 个字符。如果我做错了,抱歉)。
简而言之:如果我有巴什作为主机 1 和主机 2 上的默认 shell,并且
如果我从 host1 运行以下命令:
ssh host2 ~/some/path/somescript.py 它不起作用。
这是因为没有任何.-文件源自远程主机,因此我的 PYTHONPATH 未设置并且 = 命令失败。
这给我们带来了问题的简短版本:
没有。当我在远程主机上运行 bash (即非交互式)时获取的文件。
为了证明这一点,我在远程主机上创建了以下文件:
- .bash_登录
- .bash_配置文件
- .bashrc
- 。轮廓
并将 echo 命令添加为第一行,即:
- 到 .bash_login : echo "hi from .bash_login"
- 到 .bash_profile :回显“来自 .bash_profile 的嗨”
- 到 .bashrc :回显“hi from .bashrc”
- 到 .profile :回显“hi from .profile”
但是如果我跑说
ssh name@host2 "ls ~/foo" 我只看到“ls”的输出,但没有回显输出。
为什么它确实会回响?男人实际上是这样说的:
当 bash 以非交互方式启动时,要运行 shell 脚本,例如,它会在环境中查找变量 BASH_ENV,如果它出现在那里,则扩展它的值,并使用扩展的值作为要读取和执行的文件的名称。执行。 Bash 的行为就像执行了以下命令: if [ -n "$BASH_ENV" ];然后 。 “$BASH_ENV”; fi 但 PATH 变量的值不用于搜索 f
换句话说,似乎根据手册当 bash 以非交互方式启动时,默认情况下没有运行的 .-file。
必须将其设置在环境中。 var-le "BASH_ENV" 如果她想获取文件。
但这似乎是一件不可能完成的事情,因为...可以设置 BASH_ENV 或其他任何内容,因为没有来源文件?!?!?!?
这看起来很疯狂。我是地球上唯一需要通过 ssh 在远程计算机上以非交互方式运行 bash 的人吗?
请帮忙。提前致谢。
答案1
您可以选择获取这些文件之一,然后通过执行以下操作在同一个 ssh 调用中运行您的 .py 脚本ssh user@host ". ./.dot-command && python_script.py