|
6 | 6 |
|
7 | 7 | defmodule RabbitMQ.CLI.Diagnostics.Commands.RemoteShellCommand do
|
8 | 8 | @behaviour RabbitMQ.CLI.CommandBehaviour
|
| 9 | + @dialyzer :no_missing_calls |
9 | 10 |
|
10 | 11 | use RabbitMQ.CLI.Core.MergesNoDefaults
|
11 | 12 | use RabbitMQ.CLI.Core.AcceptsNoPositionalArguments
|
12 | 13 |
|
13 | 14 | def run([], %{node: node_name}) do
|
14 |
| - _ = Supervisor.terminate_child(:kernel_sup, :user) |
15 |
| - Process.flag(:trap_exit, true) |
16 |
| - user_drv = :user_drv.start(['tty_sl -c -e', {node_name, :shell, :start, []}]) |
17 |
| - Process.link(user_drv) |
18 |
| - |
19 |
| - receive do |
20 |
| - {'EXIT', _user_drv, _} -> |
21 |
| - {:ok, "Disconnected from #{node_name}."} |
| 15 | + _ = :c.l(:shell) |
| 16 | + |
| 17 | + if :erlang.function_exported(:shell, :start_interactive, 1) do |
| 18 | + :shell.start_interactive({node_name, :shell, :start, []}) |
| 19 | + :timer.sleep(:infinity) |
| 20 | + else |
| 21 | + _ = Supervisor.terminate_child(:kernel_sup, :user) |
| 22 | + Process.flag(:trap_exit, true) |
| 23 | + user_drv = :user_drv.start(['tty_sl -c -e', {node_name, :shell, :start, []}]) |
| 24 | + Process.link(user_drv) |
| 25 | + |
| 26 | + receive do |
| 27 | + {'EXIT', _user_drv, _} -> |
| 28 | + {:ok, "Disconnected from #{node_name}."} |
| 29 | + end |
22 | 30 | end
|
23 | 31 | end
|
24 | 32 |
|
|
0 commit comments