使用 SSH 远程运行程序,但它不会使用我的 .bashrc 并且 PATH 错误

使用 SSH 远程运行程序,但它不会使用我的 .bashrc 并且 PATH 错误

我正在尝试使用 SSH 远程运行命令,但我的问题是,当我这样做时,我的 .basrhc 没有被执行,因此 PATH 完全错误并且我的脚本被破坏了。

我正在做的是

ssh www.remotehost.com'my_command'

我也尝试过

ssh www.remotehost.com 'source ~/.bashrc; my_command' 和类似的变体,但似乎没有任何作用。

答案1

带有单个简单命令参数的 SSH 将不会启动 shell,这意味着 .bashrc 不会被执行。

带有复合命令参数(如第二个示例)的 SSH 应该会启动一个 shell,但它是非交互式的,因此默认情况下不会运行 .bashrc。请参阅Bash 启动文件在里面Bash 手册了解更多信息。

但是,在第二个示例命令中调用“source”应该可以工作。您的 .bashrc 顶部是否有一行类似if [ "$PS1" ]; then或 的if [ -z "$PS1" ]; then行?示例 bashrc 确实有其中一行,除非您在交互式 shell 上,否则它会阻止脚本命令运行。如上所述,当您传递命令参数时,SSH 默认不会启动交互式 shell。尝试ssh -t www.remotehost.com 'source ~/.bashrc; my_command',因为这将强制分配 TTY 并像交互式 shell 一样运行。

答案2

Zancheys Post 为您提供正确的解决方案。

一个其他方法可以提供一个像下面这样的简单的 shell 脚本。

#!/bin/sh
# program name: /usr/local/bin/my_command_ssh
#
export PATH=/home/custom/bin:/usr/local/bin:/usr/bin:/bin
my_command

现在你就可以通过 ssh 调用它了:

ssh -p22 [email protected] '/usr/local/bin/my_command_ssh'

相关内容