【问题标题】:Command not found when using bash script to ssh remote machine使用 bash 脚本 ssh 远程机器时找不到命令
【发布时间】:2018-02-03 14:20:01
【问题描述】:

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

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

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

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

无论如何,如果我从终端正常 ssh 到我的机器,然后执行命令,它会完美运行。

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

我在 Google 上搜索了很多并尝试了不同的东西。没有任何效果。

如果有帮助,请看我的脚本:

#!/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 文件时,我没有看到任何输出,并且我确信组件没有启动,因为我没有效果:(

提前致谢

【问题讨论】:

  • 我猜cmd1 不在$PATH 中,当您运行没有 tty 的会话时,这可能是 ssh 正在做的事情。您是否尝试将cmd1 的完整路径放在./start_components${HOSTNAME}.sh 中?
  • 嗨@PauloScardine 我现在确实尝试过,它给了我另一个错误:permission denied。通常我不使用sudo ./start_components2.sh 那么为什么它告诉我我不被允许?非常感谢您的支持。
  • set -x;export PS4='$LINENO >' 添加为./start_components2.sh 的第二行。然后,您可以查看每行正在执行的内容。祝你好运。
  • 请删除现在包含在您的 Q 中的多余 cmets。祝您好运。
  • 如果在脚本中硬编码命令会发生什么,例如ssh -l ${USERNAME} "robot${HOSTNAME} "/opt/openrobots/bin/pom-ros"

标签: linux bash shell ssh


【解决方案1】:

Command not found 通常意味着它在当前目录中找不到它,因为您使用点执行。

尝试放置脚本的完整路径。比如:

ssh -l ${USERNAME} "robot${HOSTNAME}" "/home/${USERNAME}/start_components${HOSTNAME}.sh; ls"

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

【讨论】:

  • 错误信息是关于cmd1,而不是start_components1.sh
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-11-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 2016-06-05
    • 2018-05-21
    • 2012-12-05
    • 1970-01-01
    相关资源
    最近更新 更多