11class Exec < Process
2- VERSION = " 0.2.1 "
2+ VERSION = " 0.2.2 "
33
4- class IO
5- class MultiWriter < ::IO::MultiWriter
6- alias IO = ::IO | ::IO ::FileDescriptor | ::String ::Builder
7-
8- def read (slice : Bytes ) : NoReturn
9- raise ::IO ::Error .new(" Can't read from IO::MultiWriter" )
10- end
11- end
12- end
4+ # https://github.com/crystal-lang/crystal/blob/1.19.1/src/compiler/crystal/macros/macros.cr#L68
5+ record Err , stdout : String , stderr : String , status : Process ::Status
136
147 def self.run (command : String , args = nil , env : Env = nil , clear_env : Bool = false , shell : Bool = true ,
15- input : Stdio = Redirect ::Inherit , output : Stdio = Redirect ::Inherit , error : Stdio = Redirect ::Inherit , chdir : Path | String ? = nil ) : String | { String , String , Process :: Status }
8+ input : Stdio = Redirect ::Inherit , output : Stdio = Redirect ::Inherit , error : Stdio = Redirect ::Inherit , chdir : Path | String ? = nil ) : String | Err
169 output_strio = String ::Builder .new
1710 error_strio = String ::Builder .new
1811
1912 output_writer = if output.is_a?(Redirect )
20- output == Redirect ::Close ? output : Exec :: IO ::MultiWriter .new(STDOUT , output_strio)
13+ output == Redirect ::Close ? output : IO ::MultiWriter .new(STDOUT , output_strio)
2114 else
22- output != STDOUT ? Exec :: IO ::MultiWriter .new(STDOUT , output, output_strio) : Exec :: IO ::MultiWriter .new(STDOUT , output_strio)
15+ output != STDOUT ? IO ::MultiWriter .new(STDOUT , output, output_strio) : IO ::MultiWriter .new(STDOUT , output_strio)
2316 end
2417
2518 error_writer = if error.is_a?(Redirect )
26- error == Redirect ::Close ? error : Exec :: IO ::MultiWriter .new(STDERR , error_strio)
19+ error == Redirect ::Close ? error : IO ::MultiWriter .new(STDERR , error_strio)
2720 else
28- error != STDERR ? Exec :: IO ::MultiWriter .new(STDERR , error, error_strio) : Exec :: IO ::MultiWriter .new(STDERR , error_strio)
21+ error != STDERR ? IO ::MultiWriter .new(STDERR , error, error_strio) : IO ::MultiWriter .new(STDERR , error_strio)
2922 end
3023
3124 status = new(command, args, env, clear_env, shell, input, output_writer, error_writer, chdir).wait
@@ -40,7 +33,7 @@ class Exec < Process
4033 when true
4134 output_strio.to_s
4235 else
43- { output_strio.to_s, error_strio.to_s, status}
36+ Err .new( output_strio.to_s, error_strio.to_s, status)
4437 end
4538 end
4639
0 commit comments