1

当我在这个 bash 脚本中运行 C 程序时,它会返回错误。

ssh -n -f *.*.*.* "cd /home/sth/remote && echo "$1" && det=$(./ossec-rootcheck)">/home/sthh/res

错误:

 ./ossec-rootcheck: No such file or directory

我想通过 ssh 连接到远程机器,然后在其上运行程序。我知道该文件位于该路径中,因为当我如您所见编辑它时,它可以工作。

ssh -n -f *.*.*.* "cd /home/sth/remote && echo "$1" && ./ossec-rootcheck">/home/sthh/res

而且echo $1我可以看到它是cd /home/sth/remote正确的。但我希望将该程序的返回值存储在一个变量中,例如det

4

2 回答 2

2
ssh -n -f *.*.*.* "cd /home/sth/remote; echo "$1"; ./ossec-rootcheck || do_your_work">/home/sthh/res

您不必将其存储在变量中。

|| 如果 ossec-rootcheck 的退出状态 != 0 则执行 do_your_work

如果要将数字退出状态存储在变量中或回显它,您可以执行以下操作(使用适当的转义):

./ossec-rootcheck; ecode=$?; echo $ecode
于 2013-09-17T12:50:37.187 回答
1

获取远程代码的返回码或退出码:

ssh -n -f *.*.*.* "cd /***/***/remote && echo \"$1\"; ./ossec-rootcheck; echo \$?">/home/ossl7/res

还要捕获错误:

ssh -n -f *.*.*.* "exec 2>&1; cd /***/***/remote && echo \"$1\"; ./ossec-rootcheck; echo \$?">/home/ossl7/res

&& echo \"$1\"此外,当您发现它已经在工作时,您可能需要省略它。你可以只使用单引号:

ssh -n -f *.*.*.* 'cd /***/***/remote; ./ossec-rootcheck; echo $?' >/home/ossl7/res

或者

ssh -n -f *.*.*.* 'exec 2>&1; cd /***/***/remote; ./ossec-rootcheck; echo $?' >/home/ossl7/res
于 2013-09-17T13:10:38.557 回答