我正在尝试编写一个 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-ros
的 start_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/