对交互式脚本使用 yes 会导致退出代码 141

Mik*_*ing 3 bash printf circleci

我需要在 CircleCI 中运行一个命令,它将预先确定的参数传递给以下命令。当命令只需要字符串或整数时,它可以很好地使用:

printf "arg1\narg2\n" | my_command
Run Code Online (Sandbox Code Playgroud)

但是,如果“我的命令”希望用户使用箭头键来选择一个选项,然后是返回键,则此方法将失败。

这是我所描述的一个例子:

? Which variation would you like to apply? (Use arrow keys)
? A
  B
  C
Run Code Online (Sandbox Code Playgroud)

所以我尝试了另一种选择,找到了一个名为 yes 的漂亮工具:

yes | my_command
Run Code Online (Sandbox Code Playgroud)

这实际上会起作用(并选择选项 A),但由于退出代码 141,它会导致 CircleCI 中的构建失败。据我所知,发生退出代码是因为 yes 仍在向已退出的进程发送输入。

我还有其他方法可以完成吗?

小智 8

(yes || true) | my_command
Run Code Online (Sandbox Code Playgroud)

这样您就可以忽略来自 的结果代码,yes但保留来自的结果代码my_command


Mik*_*ing 0

我能够通过使用双管道来覆盖错误。

yes | my_command || true
Run Code Online (Sandbox Code Playgroud)

这可行,但它会覆盖序列可能抛出的任何错误,使我的 CI 测试常青。这并不理想,但它有效。