A Crystal library for running commands in reusable contexts.
Add this to your application's shard.yml
:
dependencies:
run:
github: mosop/run
cmd = Run::Command.new("echo", [":)"])
cmd.run.wait # prints ":)"
cmd = Run.command("echo", [":)"])
%w(hello goodbye).each do |i|
cmd.run(args: [i]).wait
end
This prints:
:) hello
:) goodbye
cmd = Run.command("echo", [":)"])
100.times do
cmd.run.wait
end
This prints 100 of :).
cg = Run.group
100.times do
cg.command "echo", [":)"]
end
cg.run.wait
This prints 100 of :) too.
cg = Run.group(chdir: "path")
cg.command "pwd"
cg.command "pwd", chdir: "to"
cg.command "pwd", chdir: ".."
cg.run.wait
If the current directory is /Users/mosop, this code prints:
/Users/mosop/path
/Users/mosop/path/to
/Users/mosop
cg = Run.group
cg.command "wget", %w(http://mosop.rocks)
cg.command "wget", %w(http://mosop.yoga)
cg.command "wget", %w(http://mosop.ninja)
process_group = cg.run(parallel: true)
# do other things
process_group.wait
- In a fiber
cg = Run.group
100.times do
cg.future do
puts ":)"
0
end
end
cg.run.wait
- In a forked process
cg = Run.group
100.times do
cg.fork do
puts ":)"
0
end
end
cg.run.wait
cg = Run.group
100.times do
cg.fork do
Run::ExitStatus.new(0, ":)").exit!
0
end
end
cg.run.wait do |process|
if process = process.as?(Run::AsProcess)
puts process.exit_status.data
end
end
This prints 100 of :).
require "run"
And see:
See Wiki.
See Releases.