我正在尝试从本地 ubuntu 计算机自动执行一些需要在远程 Linux 计算机中执行的步骤。
我的 shell 脚本如下:-
#!/bin/sh
ssh XYZ '
qlogin -l cuda=1
'
当我尝试通过收集./fileName.sh
.我正进入(状态
bash: line 2: qlogin: command not found
但是,当我手动执行此操作(即 ssh 进入集群并运行此命令)时,我可以执行它。
目前故障排除
本地和远程终端都是 bash 。这我得到了
echo $0
当我手动 ssh 到远程并打印 qlogin 的路径时(通过
which qlogin
)。我明白了
/opt/ge/bin/lx-amd64/qlogin
但是,当我通过脚本执行相同操作时,我没有得到任何信息,这意味着 qlogin 尚未安装。
- 最后,我执行脚本的用户和我手动 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
您可以查看,的输出alias
并whereis
确定这一点。替换.bashrc
为可能提及命令完整路径的任何其他内容qlogin
,例如.profile
或其他想到的内容。