unix_commander 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .*.sw*
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use --create 1.9.3@unix_commander
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in unix_commander.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,24 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec', :cli => "--color --format nested --fail-fast --drb" do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+
9
+ # Rails example
10
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
+ watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
+ watch('config/routes.rb') { "spec/routing" }
15
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
16
+
17
+ # Capybara features specs
18
+ watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
19
+
20
+ # Turnip features and steps
21
+ watch(%r{^spec/acceptance/(.+)\.feature$})
22
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
23
+ end
24
+
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Lorenzo Lopez
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,66 @@
1
+ # UnixCommander
2
+
3
+ This is a gem used to run unix commands ruby style.
4
+ Normally to run a command we have to do something like:
5
+
6
+ ```
7
+ %x[cat file | tail -n10 | grep 'something']
8
+ ```
9
+
10
+ The goal is to be able to do it with a more rubyesque way.
11
+
12
+ ## Installation
13
+
14
+ Add this line to your application's Gemfile:
15
+
16
+ gem 'unix_commander'
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install unix_commander
25
+
26
+ ## Usage
27
+
28
+ With this gem you will be able to run unix commands this way:
29
+
30
+ ```
31
+ require 'unix_commander'
32
+
33
+ comm = UnixCommander::Command.new
34
+ comm.cat("file").tail("-n10").grep("'something'").run
35
+ ```
36
+
37
+ You don't have to run the commands right away, we can create a command and run it whe we see fit:
38
+
39
+ ```
40
+ require 'unix_commander'
41
+
42
+ comm = UnixCommander::Command.new
43
+ comm = comm.cat("file").tail("-n10").grep("'something'")
44
+
45
+ ...
46
+
47
+ comm.run
48
+ ```
49
+
50
+ Also you can run commands remotely using ssh using **run_ssh** instead of **run**.
51
+ (Syntax: **run_shh(username, password,server)** or **run_ssh(username,password)** to connect to localhost)
52
+
53
+ ```
54
+ require 'unix_commander'
55
+
56
+ comm = UnixCommander::Command.new
57
+ comm.cat("file").tail("-n10").grep("'something'").run_ssh("Batou99","secret","remote_server")
58
+ ```
59
+
60
+ ## Contributing
61
+
62
+ 1. Fork it
63
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
64
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
65
+ 4. Push to the branch (`git push origin my-new-feature`)
66
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,3 @@
1
+ module UnixCommander
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,50 @@
1
+ require "unix_commander/version"
2
+ require 'pry'
3
+ require 'open3'
4
+ require 'net/ssh'
5
+
6
+ module UnixCommander
7
+
8
+ class Command
9
+
10
+ attr :cmd
11
+
12
+ def initialize(_cmd = "")
13
+ @cmd = _cmd
14
+ end
15
+
16
+ def method_missing(m, *args, &block)
17
+ if cmd == ""
18
+ Command.new("#{m} #{args.join(' ')}".strip)
19
+ else
20
+ Command.new("#{cmd} | #{m} #{args.join(' ')}".strip)
21
+ end
22
+ end
23
+
24
+ def run
25
+ @in, @out, @err = Open3.popen3("#{cmd}")
26
+ @out.read
27
+ end
28
+
29
+ def run_ssh(_username, _password = "", _address = "127.0.0.1")
30
+ stdout_data = ""
31
+ Net::SSH.start(_address,_username,:password => _password) do |ssh|
32
+ channel = ssh.open_channel do |ch|
33
+ ch.exec(@cmd) do |ch,success|
34
+ # "on_data" is called when the process writes something to stdout
35
+ ch.on_data do |c, data|
36
+ stdout_data += data
37
+ end
38
+
39
+ # "on_extended_data" is called when the process writes something to stderr
40
+ ch.on_extended_data do |c, type, data|
41
+ raise "Error on command: #{data}"
42
+ end
43
+ end
44
+ end
45
+ end
46
+ # We have to strip the extra linefeed
47
+ stdout_data
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,71 @@
1
+ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
2
+ root 1 0.0 0.3 3520 1532 ? Ss Nov23 0:00 /sbin/init
3
+ root 2 0.0 0.0 0 0 ? S Nov23 0:00 [kthreadd]
4
+ root 3 0.0 0.0 0 0 ? S Nov23 0:02 [ksoftirqd/0]
5
+ root 5 0.0 0.0 0 0 ? S Nov23 0:00 [kworker/u:0]
6
+ root 6 0.0 0.0 0 0 ? S Nov23 0:00 [migration/0]
7
+ root 7 0.0 0.0 0 0 ? S Nov23 0:04 [watchdog/0]
8
+ root 8 0.0 0.0 0 0 ? S< Nov23 0:00 [cpuset]
9
+ root 9 0.0 0.0 0 0 ? S< Nov23 0:00 [khelper]
10
+ root 10 0.0 0.0 0 0 ? S Nov23 0:00 [kdevtmpfs]
11
+ root 11 0.0 0.0 0 0 ? S< Nov23 0:00 [netns]
12
+ root 12 0.0 0.0 0 0 ? S Nov23 0:02 [sync_supers]
13
+ root 13 0.0 0.0 0 0 ? S Nov23 0:00 [bdi-default]
14
+ root 14 0.0 0.0 0 0 ? S< Nov23 0:00 [kintegrityd]
15
+ root 15 0.0 0.0 0 0 ? S< Nov23 0:00 [kblockd]
16
+ root 16 0.0 0.0 0 0 ? S< Nov23 0:00 [ata_sff]
17
+ root 17 0.0 0.0 0 0 ? S Nov23 0:00 [khubd]
18
+ root 18 0.0 0.0 0 0 ? S< Nov23 0:00 [md]
19
+ root 19 0.0 0.0 0 0 ? S Nov23 0:00 [kworker/u:1]
20
+ root 21 0.0 0.0 0 0 ? S Nov23 0:00 [khungtaskd]
21
+ root 22 0.0 0.0 0 0 ? S Nov23 0:00 [kswapd0]
22
+ root 23 0.0 0.0 0 0 ? SN Nov23 0:00 [ksmd]
23
+ root 24 0.0 0.0 0 0 ? S Nov23 0:00 [fsnotify_mark]
24
+ root 25 0.0 0.0 0 0 ? S Nov23 0:00 [ecryptfs-kthrea]
25
+ root 26 0.0 0.0 0 0 ? S< Nov23 0:00 [crypto]
26
+ root 34 0.0 0.0 0 0 ? S< Nov23 0:00 [kthrotld]
27
+ root 36 0.0 0.0 0 0 ? S Nov23 0:00 [scsi_eh_0]
28
+ root 37 0.0 0.0 0 0 ? S Nov23 0:00 [scsi_eh_1]
29
+ root 39 0.0 0.0 0 0 ? S Nov23 0:00 [scsi_eh_2]
30
+ root 61 0.0 0.0 0 0 ? S< Nov23 0:00 [devfreq_wq]
31
+ root 219 0.0 0.0 0 0 ? S< Nov23 0:00 [kdmflush]
32
+ root 228 0.0 0.0 0 0 ? S< Nov23 0:00 [kdmflush]
33
+ root 242 0.0 0.0 0 0 ? S Nov23 0:01 [jbd2/dm-0-8]
34
+ root 243 0.0 0.0 0 0 ? S< Nov23 0:00 [ext4-dio-unwrit]
35
+ root 330 0.0 0.1 2816 588 ? S Nov23 0:00 upstart-udev-bridge --daemon
36
+ root 332 0.0 0.1 2944 852 ? Ss Nov23 0:00 /sbin/udevd --daemon
37
+ root 439 0.0 0.0 0 0 ? S< Nov23 0:00 [kpsmoused]
38
+ root 480 0.0 0.0 2828 176 ? S Nov23 0:00 upstart-socket-bridge --daemon
39
+ root 745 0.0 0.2 6664 1516 ? Ss Nov23 0:00 /usr/sbin/sshd -D
40
+ 102 750 0.0 0.0 3240 356 ? Ss Nov23 0:00 dbus-daemon --system --fork --activation=upstart
41
+ syslog 760 0.0 0.1 30148 880 ? Sl Nov23 0:22 rsyslogd -c5
42
+ root 822 0.0 0.1 4612 672 tty4 Ss+ Nov23 0:00 /sbin/getty -8 38400 tty4
43
+ root 830 0.0 0.1 4612 672 tty5 Ss+ Nov23 0:00 /sbin/getty -8 38400 tty5
44
+ root 840 0.0 0.1 4612 672 tty2 Ss+ Nov23 0:00 /sbin/getty -8 38400 tty2
45
+ root 841 0.0 0.1 4612 672 tty3 Ss+ Nov23 0:00 /sbin/getty -8 38400 tty3
46
+ root 846 0.0 0.1 4612 672 tty6 Ss+ Nov23 0:00 /sbin/getty -8 38400 tty6
47
+ whoopsie 866 0.0 0.4 24440 2168 ? Ssl Nov23 0:15 whoopsie
48
+ root 867 0.0 0.0 2156 484 ? Ss Nov23 0:00 acpid -c /etc/acpi/events -s /var/run/acpid.socket
49
+ root 893 0.0 0.1 2600 708 ? Ss Nov23 0:00 cron
50
+ daemon 894 0.0 0.0 2452 232 ? Ss Nov23 0:00 atd
51
+ root 925 0.0 0.1 4612 672 tty1 Ss+ Nov23 0:00 /sbin/getty -8 38400 tty1
52
+ dev 1395 0.0 0.7 5640 3564 ? Ss Nov23 3:02 tmux -2
53
+ root 2922 0.0 0.6 9604 3088 ? Ss 12:18 0:00 sshd: dev [priv]
54
+ dev 3083 0.0 0.2 9604 1468 ? S 12:18 0:00 sshd: dev@pts/1
55
+ dev 3084 0.0 1.1 9420 5924 pts/1 Ss 12:18 0:00 -zsh
56
+ root 3816 0.0 0.0 0 0 ? S 12:38 0:00 [kworker/0:0]
57
+ root 4002 0.0 0.0 0 0 ? S 12:45 0:00 [flush-252:0]
58
+ dev 4199 0.0 1.7 25804 8876 pts/5 S+ 12:46 0:00 vim
59
+ dev 4460 0.0 0.2 3256 1024 pts/1 S+ 12:53 0:00 tmux -2
60
+ dev 4461 0.0 1.0 8812 5272 pts/2 Ss 12:53 0:00 -zsh
61
+ dev 4971 0.0 1.0 8924 5216 pts/5 Ss Nov23 0:00 -zsh
62
+ dev 5368 0.0 0.8 8024 4284 pts/3 Ss+ 12:57 0:00 -zsh
63
+ root 5566 0.0 0.0 0 0 ? S 13:03 0:00 [kworker/0:2]
64
+ mysql 5590 0.0 8.7 328964 44596 ? Ssl Nov23 2:04 /usr/sbin/mysqld
65
+ root 5661 0.0 0.0 0 0 ? S 13:08 0:00 [kworker/0:1]
66
+ dev 5809 0.0 0.2 4924 1164 pts/2 R+ 13:10 0:00 ps axu
67
+ dev 6124 0.0 1.2 26712 6424 pts/5 T Nov23 0:16 vim
68
+ dev 20477 0.0 1.1 9496 5892 pts/6 Ss Nov26 0:00 -zsh
69
+ dev 29317 0.0 9.6 69572 49144 pts/6 Sl+ Nov26 0:53 ruby /home/dev/.rvm/gems/ruby-1.9.3-p194@app_checker/bin/rackup
70
+ root 30080 0.0 0.1 2940 616 ? S Nov27 0:00 /sbin/udevd --daemon
71
+ root 30085 0.0 0.1 2892 660 ? S Nov27 0:00 /sbin/udevd --daemon
@@ -0,0 +1,46 @@
1
+ require 'pry'
2
+ require './lib/unix_commander'
3
+
4
+ describe "Commands without chaining" do
5
+ before do
6
+ @command = UnixCommander::Command.new
7
+ end
8
+
9
+ it "should run commands with no args" do
10
+ version = %x[uname]
11
+ @command.uname.run.should == version
12
+ end
13
+
14
+ it "should run commands with one arg" do
15
+ long_version = %x[uname -a]
16
+ @command.uname("-a").run.should == long_version
17
+ end
18
+
19
+ end
20
+
21
+ describe "Commands with chaining" do
22
+ before do
23
+ @command = UnixCommander::Command.new
24
+ end
25
+
26
+ it "can chain 2 commands" do
27
+ uname_cut = %x[uname -a | cut -d'#' -f1]
28
+ @command.uname("-a").cut("-d'#' -f1").run.should == uname_cut
29
+ end
30
+
31
+ it "can chain 3 commands" do
32
+ cpuinfo = %x[ cat /proc/cpuinfo | awk '{ print $1 }' | head -n1]
33
+ @command.cat("/proc/cpuinfo").awk("'{ print $1 }'").head("-n1").run.should == cpuinfo
34
+ end
35
+ end
36
+
37
+ describe "Run via ssh" do
38
+ before do
39
+ @command = UnixCommander::Command.new
40
+ end
41
+
42
+ it "can chain 2 commands" do
43
+ uname_cut = %x[uname -a | cut -d'#' -f1]
44
+ @command.uname("-a").cut("-d'#' -f1").run_ssh('dev','dev').should == uname_cut
45
+ end
46
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'unix_commander/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "unix_commander"
8
+ gem.version = UnixCommander::VERSION
9
+ gem.authors = ["Lorenzo Lopez"]
10
+ gem.email = ["lorenzo.lopez@uk.tesco.com"]
11
+ gem.description = %q{A gem to run unix commands on a more ruby-esque way}
12
+ gem.summary = gem.description
13
+ gem.homepage = "https://github.com/Batou99/unix_commander"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+ gem.add_dependency "net-ssh", ">=2.6.2"
20
+ gem.add_development_dependency "rspec", "~> 2.12"
21
+ gem.add_development_dependency "pry"
22
+ gem.add_development_dependency "pry-debugger"
23
+ gem.add_development_dependency "guard-rspec"
24
+ gem.add_development_dependency "rb-inotify"
25
+ gem.add_development_dependency "rb-fsevent"
26
+ end
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: unix_commander
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Lorenzo Lopez
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: net-ssh
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.6.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.6.2
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '2.12'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.12'
46
+ - !ruby/object:Gem::Dependency
47
+ name: pry
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: pry-debugger
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: guard-rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rb-inotify
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rb-fsevent
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: A gem to run unix commands on a more ruby-esque way
127
+ email:
128
+ - lorenzo.lopez@uk.tesco.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .gitignore
134
+ - .rvmrc
135
+ - Gemfile
136
+ - Guardfile
137
+ - LICENSE.txt
138
+ - README.md
139
+ - Rakefile
140
+ - lib/unix_commander.rb
141
+ - lib/unix_commander/version.rb
142
+ - spec/fixtures/ps_list.txt
143
+ - spec/single_commands_spec.rb
144
+ - unix_commander.gemspec
145
+ homepage: https://github.com/Batou99/unix_commander
146
+ licenses: []
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ none: false
159
+ requirements:
160
+ - - ! '>='
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ requirements: []
164
+ rubyforge_project:
165
+ rubygems_version: 1.8.24
166
+ signing_key:
167
+ specification_version: 3
168
+ summary: A gem to run unix commands on a more ruby-esque way
169
+ test_files:
170
+ - spec/fixtures/ps_list.txt
171
+ - spec/single_commands_spec.rb