如何默认Ruby"gem clean"命令的[Yn]响应?

Anu*_*pam 6 ruby gem automation default prompt

我经常使用Ruby gem clean命令来保持本地gem存储库的形状.

但是,由于依赖性问题,该命令多次返回一个提示,例如:

XXXXX-1.0.6 depends on [YYYYYY (~> 0.8.4)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn]  
Run Code Online (Sandbox Code Playgroud)

虽然这很简单,但它需要手动干预(对于[Yn]响应),因此这使我无法创建一个简单的cron脚本来自动执行此过程.

有关如何默认响应这些gem提示的任何想法?

mu *_*ort 9

你应该有一个yes命令,OSX版本有这个说:

YES(1)                    BSD General Commands Manual                   YES(1)

NAME
     yes -- be repetitively affirmative

SYNOPSIS
     yes [expletive]

DESCRIPTION
     yes outputs expletive, or, by default, ``y'', forever.

HISTORY
     The yes command appeared in 4.0BSD.

4th Berkeley Distribution        June 6, 1993        4th Berkeley Distribution
Run Code Online (Sandbox Code Playgroud)

所以也许这会奏效:

yes n | gem clean
Run Code Online (Sandbox Code Playgroud)

gem clean可能是直接从终端读取而不是标准输入.在这种情况下,你可能会expect踢:

Expect是一个根据脚本与其他交互式程序"对话"的程序.在脚本之后,Expect知道程序可以期待什么以及正确的响应应该是什么.解释语言提供分支和高级控制结构来指导对话.此外,用户可以在需要时直接进行控制和交互,然后将控制权返回给脚本.

因此,您可以根据需要编写一个expect脚本,以"y"或"n"响应预期的提示.


Thi*_*ilo 1

这应该有效:

echo|gem clean
Run Code Online (Sandbox Code Playgroud)

它的作用就像在提示符下按回车键一样。'y' 是默认值,它将运行gem clean至完成。