Nothing has been indexed for 0.4.1 yet. The tag is recorded, its shard.yml has not been read, so the manifest and dependency list below are empty because they are unknown rather than because they are absent.

Installation

# Add this to your shard.yml
dependencies:
  run:
    github: mosop/run
    version: ~> 0.4.1

Then run:

shards install

shard.yml

No shard.yml has been indexed for 0.4.1. You can read it on the repository.

Dependencies

Unknown: the shard.yml for this version has not been read yet.

README

This README is the one indexed from the repository at its latest ref, not from the tag for this version.

Crystal Run

A Crystal library for running commands in reusable contexts.

Build Status

Installation

Add this to your application's shard.yml:

dependencies:
  run:
    github: mosop/run

Code Samples

Smiley

cmd = Run::Command.new("echo", [":)"])
cmd.run.wait # prints ":)"

Additional Arguments

cmd = Run.command("echo", [":)"])
%w(hello goodbye).each do |i|
  cmd.run(args: [i]).wait
end

This prints:

:) hello
:) goodbye

Over and Over

cmd = Run.command("echo", [":)"])
100.times do
  cmd.run.wait
end

This prints 100 of :).

Multiple at Once

cg = Run.group
100.times do
  cg.command "echo", [":)"]
end
cg.run.wait

This prints 100 of :) too.

Nested Contexts

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

Parallel

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

Running Code Blocks

  • 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

Returning Data by Forked Processes

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 :).

Usage

require "run"

And see:

Versioning Policy

See Wiki.

Release Notes

See Releases.