36

我正在尝试通过本地服务器上的 ssh 命令在远程 linux 服务器上执行命令,如下所示:

ssh myremoteserver '类型 ttisql'

其中 ttisql 是我的远程机器路径上的可执行文件。

运行结果如下:

bash:第 0 行:类型:ttisql:未找到

当我简单地先连接并执行以下操作时:

ssh myremoteserver

然后输入命令:

[myuser@myremoteserver~]$: 输入 ttisql

正如我所料,我找回了 ttisql exe 的路径。

奇怪的是,当我在我的 beta 环境中执行第一个命令时,它按预期工作并返回 exe 的路径。在 beta 场景中,机器 A 正在连接到远程机器 B,但两台机器都在现场,并且 ssh 命令快速连接到远程机器。

在我们的生产环境中,当机器 A 在本地而机器 B 在异地并且 ssh 命令需要一两秒才能连接时,就会遇到这个问题。

我能看到的唯一区别是生产 ssh 连接所需的时间。远程系统上的路径是正确的,因为如果在初始连接后输入该命令,则该命令有效。

谁能帮我理解为什么这个简单的命令可以在一个环境中工作而不是在另一个环境中工作?问题是否与通过 ssh 连接所需的时间有关?

4

2 回答 2

25

非交互式会话 ( ssh command) 与交互式会话 ( ssh, then command) 中的环境可能不同。尝试echo $PATH两种情况。

ssh myremoteserver 'echo $PATH'

对比

ssh myremoteserver
[myuser@myremoteserver~]$: echo $PATH

如果它们不同,请在所有启动脚本中查找一些基于$PS1或的差异化行为$-

于 2013-11-10T20:54:50.917 回答
24

PATH当您的 shell 是交互式的(= 当您在服务器上登录时)和非交互式的(使用 运行命令)时,您的设置不同ssh

查看您的 shell 使用的 rc 文件,例如.bashrc, (取决于您的系统)。如果你设置在正确的地方,那么当你通过..bash_profile.profilePATHttisqlssh

另一种解决方案是使用 的绝对路径ttisql,那么它将不取决于您的PATH设置。

于 2013-11-10T20:54:33.280 回答