- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要在 hudson 中运行一个 shell 脚本。该脚本需要用户的回答。为了给出自动回答,我执行了以下命令行:
yes | ./MyScript.sh
这在 Ubuntu 终端中运行良好。但是当我在 Hudson 作业中使用相同的命令时,脚本将自动执行并完成所有需要的工作,但最后,我得到了这两行错误:
yes: standard output: Broken pipe
yes: write error
这导致我在 Hudson 的工作失败。
我应该如何更改我的命令行才能在 Hudson 中正常工作?
最佳答案
But how would you explain that I dont get this error while running the script locally, but I get the error when running it remotely from a Hudson job?
当您在终端中运行它时(本地); yes
被SIGPIPE
杀死MyScript.sh
时尝试写入管道时生成的信号已经退出了。
无论在 Hudson 中运行命令(远程)都会捕获该信号(将其处理程序设置为 SIG_IGN
,您可以通过运行 trap
命令并在输出中搜索 SIGPIPE 来测试它)和它不会恢复新子进程的信号( yes
和任何运行 MyScript.sh
的信号,例如,在您的情况下为 sh
)。它导致写入错误(EPIPE
)而不是信号。 yes
检测写入错误并报告。
您可以简单地忽略错误信息:
yes 2>/dev/null | ./MyScript.sh
您还可以针对运行管道的组件报告错误。该错误在于在 fork 子进程后未将 SIGPIPE 恢复为默认处理程序。这是程序在 POSIX 系统的终端中运行时所期望的。虽然我不知道对于基于 java 的程序是否有标准的方法来做到这一点。 jvm
可能会为每个写入错误引发异常,因此在 SIGPIPE 上不死对 Java 程序来说不是问题。
像 hudson 进程这样的守护进程忽略 SIGPIPE 信号是很常见的。您不希望您的守护进程仅仅因为与您通信的进程终止而终止,并且无论如何您都会检查写入错误。
编写为在终端中运行的普通程序不会检查每个 printf()
的状态对于错误,但你希望它们在流水线中的程序死掉时死掉,例如,如果你运行 source | sink
管道;通常你想要source
如果sink
,进程尽快退出导出。
EPIPE
如果 SIGPIPE
则返回写入错误信号被禁用(就像 hudson 的情况一样)或者如果程序没有在接收到它时死掉(yes
程序没有为 SIGPIPE
定义任何处理程序,所以它应该在接收到信号时死掉)。
I don't want to ignore the error, I want to do the right command or fix to get rid of the error.
唯一方式 yes
process stops if it is killed or encountered a write error .如果SIGPIPE
信号被设置为忽略(由父级),然后没有其他信号终止进程 yes
在 ./MyScript.sh
上收到写入错误导出。如果您使用 yes
,则没有其他选项程序。
SIGPIPE
信号和 EPIPE
错误传达完全相同的信息——管道坏了。如果SIGPIPE
为 yes
启用process 然后你就不会看到错误。只是因为你看到了;没有新的事情发生。这只是意味着 ./MyScript.sh
退出(成功或不成功——无关紧要)。
关于shell - hudson : "yes: standard output: Broken pipe",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573282/
这个问题在这里已经有了答案: NSNumber Literals (5 个答案) 关闭 6 年前。 我正在发出一个 HTTP 请求,我必须在其中发送一个 bool 值。我试过他们两个。 两者的工作方
我使用 FireBug 测试了这两种情况,结果看起来非常相似: >>> var x = {"active": "yes"} >>> x.active "yes" >>> var x = {active
在 Objective-c 中,@YES/@NO 和 YES/NO 有什么区别?每种类型使用什么类型? 最佳答案 @YES 是 [NSNumber numberWithBool:YES] 的缩写形式
我正在编写一个脚本来创建虚拟机,显然我想支持标准的确认/whatif 语义。但是,如果我要创建多台机器,最好能区分"is"和“全部是”,这样我就不必重新确认每台机器。 $pscmdlet.Should
这个问题在这里已经有了答案: In JavaScript, why is "0" equal to false, but when tested by 'if' it is not false by
我需要编写一个正则表达式来验证字符串。如果正则表达式包含以下任何内容,则应传递字符串:y、Y、yes、YES , 1。这些字母可以是任何大小写。我是正则表达式和 JavaScript 的新手。 最佳答
我是网络开发的新手,如果能得到任何帮助,我将不胜感激。我有一个 HTML/CSS slider ,当 slider 处于"is"位置(如名字和主题)时,我想显示更多的文本框字段。如果可能的话,我真的希
bash: $: yes a [some output] then press Ctrl+Z $: yes b [some output] then press Ctrl+Z 然后,执行两
我感兴趣的是能够在 Yes/No 提示符下自动让我的 cmd 输入 Yes: __
以上说明了一切-我将 UITextField 设置为安全,但希望为用户提供使其不安全的选项(因此,如果他们在私有(private)区域中,他们可以确定输入的内容)。但是,假设他们误按了切换开关,并想将
当 ssh hostname 提示 The authenticity of host 'foobar' can't be established. ECDSA key fingerprint is .
如何在自定义 MKAnnotationView 上正确设置半径并允许标注?这会引发异常: 来 self 的自定义 MKAnnotationView 类: - (id)initWithFrame:(CG
如果我有 1200 行,并且我希望我的 120 行说"is"而其余的说“否”,我应该如何将其应用于 Excel 文件?我知道使用: =CHOOSE(RANDBETWEEN(1,2),"Yes","No
我想进行一个查询,返回如下所示的表结果: 列标题是我的一个表格中的字段,下面的数字是该字段的是/否条目数。 我遇到的问题是在行的开头显示是/否。我希望它以这种方式组织,以便更好地根据数据创建图表。 现
这个问题在这里已经有了答案: Literal @YES not working in iOS 5 / Xcode 4.4 (2 个答案) 关闭 7 年前。 使用 XCode 4.4 的 Conver
这段代码: $query = array( "var" => "no", "not_var" => "yes", "var2" => "maybe" ); print http
在我的 Dynamics CRM 机会表单中,我添加了销售配额分配网格。如果在整个网格中输入了四个以上"is",我希望显示一条警告消息(或类似的内容)。例如,假设记录“A”t 有 4 个标记为"is"
This question already has answers here: How do I perform an IF…THEN in an SQL SELECT? (31个答案) 已关闭6年。
考虑以下文档: foo: bar: Yes 根据the spec,这应该解释为Boolean,而不是String。 但是,it seems对此文档产生了相同的解释: foo: bar: 'Ye
在网页的第一页上,它要求用户从下拉列表中选择他们想要的产品类型,并且为每个产品指定一个值 0,1,2...然后,一旦他们继续,他们就会被发送到不同的网页,并根据他们选择的产品在那里我希望单选按钮自动选
我是一名优秀的程序员,十分优秀!