Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ssh – 使用“curl |”远程执行脚本bash“反馈大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在使用一个使用很多这样命令的平台: ssh login@server.com’curl http://some_server/script.sh |庆典” 这是非常干净和方便远程执行脚本,但是,我不会看到任何方式获取脚本的输出/退出代码.任何人都可以找出一些东西,以确保脚本已正确执行(从主机启动ssh的角度来看). 正如@Zoredache指出的那样,ssh将远程命令的状态作为自己的退出状态进
@H_489_13@
我正在使用一个使用很多这样命令的平台:
ssh login@server.com’curl http://some_server/script.sh |庆典”

这是非常干净和方便远程执行脚本,但是,我不会看到任何方式获取脚本的输出/退出代码.任何人都可以找出一些东西,以确保脚本已正确执行(从主机启动ssh的角度来看).

解决方法

正如@Zoredache指出的那样,ssh将远程命令的状态作为自己的退出状态进行中继,因此错误检测通过SSH透明地工作.但是,在您的示例中需要特别虑两个要点.

首先,卷曲往往非常宽松,将许多异常情况视为成功.例如,curl http://serverfault.com/some-non-existent-url-that-returns-404实际上具有退出状态0.我发现此行为违反直觉.要将这些条件视为错误,我喜欢使用-fsS标志:

> –fail标志在发生故障时抑制输出,因此bash将无法像执行代码一样执行Web服务器的404错误页面.
> –silent –show-error标记一起提供合理数量错误报告. –silent抑制卷曲的所有评论. –show-error重新启用错误消息,这些消息将发送到STDERR.

其次,您有一个管道,这意味着第一个或第二个命令可能会发生故障.从约Pipelines in bash(1)部分:

旁注:bash文档是相关的,不是因为你管道bash,而是因为(我假设)它是你的远程用户登录sHell,因此是解释远程命令行并处理管道执行的程序.如果用户具有不同的登录sHell,请参阅该sHell的文档.

作为一个具体的例子,

( echo whoami ; false ) | bash
echo $?

产生输出

login
0

证明管道末端的bash将掩盖false返回的错误状态.只要它成功执行whoami,它将返回0.

相反,

set -o pipefail
( echo whoami ; false ) | bash
echo $?

产量

login
1

便报告管道上半部分的故障.

总而言之,解决方案应该是

ssh login@server.com 'set -s pipefail ; curl -fsS http://some_server/script.sh | bash'

这样,如果以下任何一个返回非零,您将获得非零退出状态:

> ssh
>远程登录sHell
>卷曲
>管道末端的bash

此外,如果curl -fsS检测到异常的http状态代码,那么它将

>抑制它的STDOUT,这样就不会有任何东西被传递给bash来执行>返回一个非零值,该值一直正确传播>将一行诊断消息打印到其STDERR,该消息也一直传播

大佬总结

以上是大佬教程为你收集整理的ssh – 使用“curl |”远程执行脚本bash“反馈全部内容,希望文章能够帮你解决ssh – 使用“curl |”远程执行脚本bash“反馈所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。