【发布时间】: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-ros 的 start_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"?