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

我试图用SSH远程运行一个命令,但是我的问题是,当我这样做时,我的.basrhc没有得到执行,所以PATH都是错误的,我的脚本正在破坏。

我在做什么

ssh www.remotehost.com'my_command'

我也尝试过

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

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

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

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

Zancheys邮政给你正确的解决scheme。

另一个问题可能是提供一个简单的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'