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 (execution expired)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.configure do |config|
config.include CommandLine
endThis will make command_line available in your test suite.