使用 shell 脚本在远程服务器中执行时找不到命令

使用 shell 脚本在远程服务器中执行时找不到命令

我正在尝试从本地 ubuntu 计算机自动执行一些需要在远程 Linux 计算机中执行的步骤。

我的 shell 脚本如下:-

#!/bin/sh

ssh XYZ '

qlogin -l cuda=1

'

当我尝试通过收集./fileName.sh.我正进入(状态

bash: line 2: qlogin: command not found

但是,当我手动执行此操作(即 ssh 进入集群并运行此命令)时,我可以执行它。

目前故障排除

  1. 本地和远程终端都是 bash 。这我得到了echo $0

  2. 当我手动 ssh 到远程并打印 qlogin 的路径时(通过which qlogin)。我明白了

/opt/ge/bin/lx-amd64/qlogin

但是,当我通过脚本执行相同操作时,我没有得到任何信息,这意味着 qlogin 尚未安装。

  1. 最后,我执行脚本的用户和我手动 ssh 时登录的用户不一样(通过打印得到它who)。

我应该怎么办 ?

答案1

在这种情况下你想要的是:

ssh XYZ "qlogin -l cuda=1"

或者

ssh XYZ "export TERM=xterm ; qlogin -l cuda=1"

如果您收到有关TERM未设置变量的错误,或者:

ssh XYZ << 'EOF'
qlogin -l cuda=1
EOF

如果您有多个命令要运行。

最后,因为我确信如果上述方法不起作用,这也可以工作:

ssh XYZ << 'EOF'
shopt -s expand_aliases
source .bashrc
qlogin -l cuda=1
EOF

正如您可能注意到的,如果另一个不起作用,最后一个可能起作用,主要是如果qlogin不在默认导出的路径之一中,并且是:

  • 别名的某处其他(例如:某些远程服务器喜欢将其安装脚本保存在未在 PATH 中导出的已安装 NFS 文件夹中)

  • 如果它是由函数组成的更大函数/脚本的一部分。

env您可以查看,的输出aliaswhereis确定这一点。替换.bashrc为可能提及命令完整路径的任何其他内容qlogin,例如.profile或其他想到的内容。

相关内容