linux - 使用 bash 脚本到 ssh 远程机器时找不到命令

标签 linux bash shell ssh

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

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

./start_components1.sh: line 17: cmd1: command not found

它们是我机器的一些特定命令,我认为它们与当我通过 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

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

提前致谢

最佳答案

ssh 命令通常在 $PATH 变量中找到,这就是为什么您可以从任何地方在 STDIN 上键入“ssh user@host”。但在脚本内部,环境变量可能不可用。

您可以通过以下方式解决此问题 /bin/ssh user@host

根据您的 Linux 风格,您可能需要更改 ssh 命令的绝对路径。在任何 shell 中,您都可以键入 which ssh 来查找此路径。

关于linux - 使用 bash 脚本到 ssh 远程机器时找不到命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45882979/

相关文章:

PHP-如何像作业队列一样一个接一个地运行cron作业

linux - 如何在 shell 中使用花括号 (bash)

java - 我可以在 Windows 上运行 Java 来构建 Linux 路径,而无需进行硬编码吗?

linux - 在bash中使用sed写入变量指定的行号

bash - 如何在脚本中使用 ping

linux - 如何将 Linux bash 脚本输出定向到每台主机一行

c - system() 函数从守护进程返回值始终为 -1

shell - bc 命令不将数字缩放到小数位

linux - 使用 'sh' 运行脚本时无法使用内置 bash 命令

regex - 从标准输出获取匹配后的文本