@@ -5,7 +5,8 @@ type Cmd <: AbstractCmd
5
5
ignorestatus:: Bool
6
6
detach:: Bool
7
7
env:: Union(Array{ByteString},Nothing)
8
- Cmd (exec:: Vector{ByteString} ) = new (exec,false ,false ,nothing )
8
+ dir:: UTF8String
9
+ Cmd (exec:: Vector{ByteString} ) = new (exec,false ,false ,nothing ," " )
9
10
end
10
11
11
12
type OrCmds <: AbstractCmd
29
30
shell_escape (cmd:: Cmd ) = shell_escape (cmd. exec... )
30
31
31
32
function show (io:: IO , cmd:: Cmd )
32
- if isa ( cmd. exec,Vector{ByteString})
33
- esc = shell_escape (cmd)
34
- print (io,' ` ' )
35
- for c in esc
36
- if c == ' `'
37
- print (io, ' \\ ' )
38
- end
39
- print (io,c )
33
+ print_env = cmd. env != = nothing
34
+ print_dir = ! isempty (cmd. dir )
35
+ (print_env || print_dir) && print (io," setenv( " )
36
+ esc = shell_escape (cmd)
37
+ print (io, ' `' )
38
+ for c in esc
39
+ if c == ' ` '
40
+ print (io,' \\ ' )
40
41
end
41
- print (io,' `' )
42
- else
43
- print (io, cmd. exec)
42
+ print (io,c)
44
43
end
44
+ print (io,' `' )
45
+ print_env && (print (io," ," ); show (io,cmd. env))
46
+ print_dir && (print (io," ; dir=" ); show (io,cmd. dir))
47
+ (print_dir || print_env) && print (io," )" )
45
48
end
46
49
47
50
function show (io:: IO , cmds:: OrCmds )
@@ -132,8 +135,9 @@ ignorestatus(cmd::Cmd) = (cmd.ignorestatus=true; cmd)
132
135
ignorestatus (cmd:: Union(OrCmds,AndCmds) ) = (ignorestatus (cmd. a); ignorestatus (cmd. b); cmd)
133
136
detach (cmd:: Cmd ) = (cmd. detach= true ; cmd)
134
137
135
- setenv {S<:ByteString} (cmd:: Cmd , env:: Array{S} ) = (cmd. env = ByteString[x for x in env];cmd)
136
- setenv (cmd:: Cmd , env:: Associative ) = (cmd. env = ByteString[string (k)* " =" * string (v) for (k,v) in env];cmd)
138
+ setenv {S<:ByteString} (cmd:: Cmd , env:: Array{S} ; dir= " " ) = (cmd. env = ByteString[x for x in env]; setenv (cmd,dir= dir); cmd)
139
+ setenv (cmd:: Cmd , env:: Associative ; dir= " " ) = (cmd. env = ByteString[string (k)* " =" * string (v) for (k,v) in env]; setenv (cmd,dir= dir); cmd)
140
+ setenv (cmd:: Cmd ; dir= " " ) = (cmd. dir = dir; cmd)
137
141
138
142
(& )(left:: AbstractCmd ,right:: AbstractCmd ) = AndCmds (left,right)
139
143
(|> )(src:: AbstractCmd ,dest:: AbstractCmd ) = OrCmds (src,dest)
@@ -196,10 +200,10 @@ function _jl_spawn(cmd::Ptr{Uint8}, argv::Ptr{Ptr{Uint8}}, loop::Ptr{Void}, pp::
196
200
error = ccall (:jl_spawn , Int32,
197
201
(Ptr{Uint8}, Ptr{Ptr{Uint8}}, Ptr{Void}, Ptr{Void}, Any, Int32,
198
202
Ptr{Void}, Int32, Ptr{Void}, Int32, Ptr{Void},
199
- Int32, Ptr{Ptr{Uint8}}),
203
+ Int32, Ptr{Ptr{Uint8}}, Ptr{Uint8} ),
200
204
cmd, argv, loop, proc, pp, uvtype (in),
201
205
uvhandle (in), uvtype (out), uvhandle (out), uvtype (err), uvhandle (err),
202
- pp. cmd. detach, pp. cmd. env === nothing ? C_NULL : pp. cmd. env)
206
+ pp. cmd. detach, pp. cmd. env === nothing ? C_NULL : pp. cmd. env, isempty (pp . cmd . dir) ? C_NULL : pp . cmd . dir )
203
207
if error != 0
204
208
c_free (proc)
205
209
throw (UVError (" spawn" ,error))
0 commit comments