37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/dockerun/cli/command.rb', line 37
def run(log_console = false, &block)
if interactive_session?
pmt = TTY::Prompt.new
terminal = pmt.select " Command is an interactive command. New terminal session is required. Please select one of the session below to proceed:" do |m|
detect_terminal.each do |t|
m.choice t, t
end
m.choice "Quit", :quit
end
if terminal != :quit
case terminal
when "terminator"
`#{terminal} -e "#{@command_buffer.join(" ")}; bash"`
when "gnome-terminal"
`#{terminal} -- bash -c "#{@command_buffer.join(" ")}; exec bash"`
when "konsole"
`#{terminal} --hold -e "#{@command_buffer.join(" ")}" &`
when "iTerm2"
`osascript -e \
'tell application "iTerm"
activate
create window with default profile
delay 0.5
set currentWindow to current window
tell current session of currentWindow
write text "#{@command_buffer.join(" ")}"
end tell
end tell'
`
when "Terminal"
`osascript -e \
'tell application "Terminal"
activate
do script "#{@command_buffer.join(" ")}"
end tell'
`
else
raise Error, "Unfinished supporting terminal : #{terminal}"
end
pmt.puts "\n Prompt running inside the Docker shall be opened in a new window\n\n"
end
else
@outStream = []
@errStream = []
if(log_console)
runner = TTY::Command.new(printer: :pretty)
else
runner = TTY::Command.new(printer: :null)
end
result = runner.run!(@command_buffer.join(" ")) do |out, err|
if block
block.call(:outstream, out)
block.call(:errstream, err)
else
@outStream << out if not_empty?(out)
@errStream << err if not_empty?(err)
end
end
CommandResult.new(result, @outStream, @errStream)
end
end
|