CommandLine provides an easier way to run command-line applications. It captures all outputs, can handle applications that require stdin, and can pass environment variables. It's also helpful for testing commmand-line applications.
This project is tested against and works on Linux, OS X, and Windows.
This project uses Semantic Versioning.
Add this line to your application's Gemfile:
gem'command_line','~> 2.0'If you want command_line available globally you can add this line to your application's Gemfile:
gem'command_line','~> 2.0',require: 'command_line/global'Or manually install it yourself with:
$ gem install command_lineIn a script you can make command_line available globally with:
require'command_line/global'All examples below assume that command_line has been made available globally.
If not, simply call CommandLine.command_line instead of command_line.
With command_line you to easily run commands and check their stdout, stderr, and exit status.
>> result=command_line('echo','hello')=>#<CommandLine::Result ...>
>> result.stdout=>"hello\n"
>> result.stderr=>""
>> result.exited?=>true
>> result.exitstatus=>0
>> result.success?=>true
>> result.failure?=>falseIf your application requires input use a block to send input.
command_line('command_expecting_input')do |stdin|
stdin.puts"first input"stdin.puts"second input"endEnvironment variables can be passed after the command and arguments are passed.
command_line('some_webserver',env: {PORT: '80'})If you're concerned about the command running too long you can set a :timeout.
Exceeding the timeout will cause a CommandLine::TimeoutError to be raised.
>> command_line('sleep',5,timeout: 2)CommandLine::TimeoutError(executionexpired)You can use command_line! if you want to raise an error on an exit failure.
The contents of stderr will be the error message.
>> command_line!('grep')CommandLine::ExitFailureError(usage: grep[-abc....To have direct access to CommandLine.command_line you can include it in spec/spec_helper.rb.
require'command_line'RSpec.configuredo |config|
config.includeCommandLineendThis will make command_line available in your test suite.