大佬教程收集整理的这篇文章主要介绍了ssh – 使用“curl |”远程执行脚本bash“反馈,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是非常干净和方便远程执行脚本,但是,我不会看到任何方式获取脚本的输出/退出代码.任何人都可以找出一些东西,以确保脚本已正确执行(从主机启动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'
此外,如果curl -fsS检测到异常的http状态代码,那么它将:
>抑制它的STDOUT,这样就不会有任何东西被传递给bash来执行>返回一个非零值,该值一直正确传播>将一行诊断消息打印到其STDERR,该消息也一直传播
以上是大佬教程为你收集整理的ssh – 使用“curl |”远程执行脚本bash“反馈全部内容,希望文章能够帮你解决ssh – 使用“curl |”远程执行脚本bash“反馈所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。