使用 bash 脚本 ssh 远程计算机时找不到命令

kal*_*ger 5 linux ssh bash shell

我正在尝试编写一个 bash 脚本,但我是个新手。

除了某些特定命令给我带来的错误之外,一切都正常

./start_components1.sh: line 17: cmd1: command not found
Run Code Online (Sandbox Code Playgroud)

它们是我的机器的一些特定命令,我认为它们与当我通过 bash 脚本 ssh 进入机器时,环境未加载有关。我可能是错的。

不管怎样,如果我从终端正常 ssh 进入我的机器,然后执行命令,它就会完美地工作。

当我尝试通过 bash 脚本执行相同操作时,它告诉我找不到命令。

我用谷歌搜索了很多并尝试了不同的东西。什么都没起作用。

这是我的脚本(如果有帮助的话):

#!/bin/bash

USERNAME=odroid

while getopts r:d:p:f: option
do
 case "${option}"
 in
 r) ROBOT=${OPTARG};;
 esac
done

for HOSTNAME in ${ROBOT}; do    
    ssh -l ${USERNAME} "robot${HOSTNAME}" "./start_components${HOSTNAME}.sh; ls"    
done
Run Code Online (Sandbox Code Playgroud)

编辑:我认为它可以工作在遵循@PauloScardine的提示后,我还意识到我的文件的权限没有设置为可执行,所以我sudo chmod +x fileToExecute 认为这解决了我的问题,但是:它仍然无法工作。该命令执行时没有任何错误(看起来),但它们并未真正执行。示例:如果我在我的机器上进入 ssh(没有 bash 脚本)并且我看到/opt/openrobots/bin/pom-ros我想要启动的组件已启动,我会得到一些输出等等。当我启动start_components2.sh应该启动的文件时/opt/openrobots/bin/pom-ros,我没有看到任何输出,并且我确信该组件没有启动,因为我没有效果:(

提前致谢

小智 -1

找不到命令通常意味着它在当前目录中找不到它,因为您使用了点来执行。

尝试输入脚本的完整路径。就像是:

ssh -l ${USERNAME} "robot${HOSTNAME}" "/home/${USERNAME}/start_components${HOSTNAME}.sh; ls"
Run Code Online (Sandbox Code Playgroud)

但是,只有当脚本 start_componets 位于 ${USERNAME} 变量后面的用户的主目录中时,这才有效