18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/source_win_bat.rb', line 18
def main(argv)
@args = parse_args!(argv)
@args.merge!(parse_option_envs())
unless [:cygwin, :msys, :wsl].include? UnixCompatEnv.compat_env
raise "You're in an unsupported UNIX compatible environment"
end
load_codepage()
win_cmd, outfiles, proc_env = make_envsync_cmd(@args[:win_cmd])
Signal.trap(:INT, "SIG_IGN")
if UnixCompatEnv.compat_env == :wsl
pid = Process.spawn(proc_env,
UnixCompatEnv.to_compat_path('C:\\Windows\\System32\\cmd.exe'),
'/C', win_cmd, :in => 0, :out => 1, :err => 2)
elsif !STDOUT.isatty
pid = Process.spawn(proc_env, 'cmd.exe', '/C', win_cmd, :in => 0, :out => 1, :err => 2)
else
pid = Process.spawn(prov_env, 'winpty', '--', 'cmd.exe', '/C', win_cmd, :in => 0, :out => 1, :err => 2)
end
Signal.trap(:INT) do
Process.signal("-KILL", pid)
end
status = nil
loop do
_, status = Process.wait2(pid)
break if status.exited?
end
conv_setenv_stmts(outfiles[:env_windump_file], @args[:env_sync_file])
conv_doskey_stmts(outfiles[:macro_windump_file], @args[:macro_sync_file])
gen_chdir_cmds(outfiles[:cwd_windump_file], @args[:cwd_sync_file])
delete_tmpfiles(outfiles)
exit(status.exitstatus)
end
|