iex --remsh halts the remote node at end of input
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 75/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- erlang
- Ambito
- cli
Direzione di ricerca
La shell viene avviata in lib/elixir/src/iex.erl: il caso get_remsh sceglie il MFA, e start_mfa/2 imposta {on_eof, halt} sia per le shell locali che per quelle remote. Riproduci con printf '1\n' | iex --sname client --remsh target@host mentre un nodo target è in esecuzione, e verifica che il nodo target termini. La correzione dovrebbe passare un on_eof non bloccante solo per il ramo remoto, così il nodo remoto continua a girare e il client locale termina con stato 0. Verifica che iex locale continui a terminare alla fine dell'input.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Elixir and Erlang/OTP versions
Elixir 1.20.1, 1.20.4 and main (b77fe287), on Erlang/OTP 28.5.0.2 and 29.1.1.
Operating system
NixOS (Linux)
Current behavior
iex --remsh halts the remote node when the local shell's input ends. In a terminal without line editing (TERM unset, dumb, or a TERM the host's terminfo lacks, for example xterm-kitty on a stock server), Ctrl+D on an empty line ends the input. The same happens when stdin is a pipe.
$ iex --sname target --cookie c
$ TERM=dumb iex --sname client --cookie c --remsh target@$(hostname -s)
iex(target@host)1> ^D
The target node exits with status 0. printf '1\n' | iex --sname client --cookie c --remsh target@host halts it the same way.
iex.erl passes {on_eof, halt} to IEx.Server for both local and remote shells (lib/elixir/src/iex.erl:78), and IEx.Server runs System.halt(0) on the remote node. With line editing, Ctrl+D only deletes forward, so the bug depends on the terminal. erl -remsh does not halt the remote node in the same setups.
Expected behavior
End of input in a remote shell ends the shell and leaves the remote node running, like erl -remsh. Halting on end of input makes sense for a local iex, where the shell owns the node.
A three-line change does it, passing stop_evaluator (IEx.Server's default) in the --remsh branch:
--- a/lib/elixir/src/iex.erl
+++ b/lib/elixir/src/iex.erl
@@ -53,7 +53,7 @@
case get_remsh(Args) of
nil ->
- start_mfa(Args, {elixir, start_cli, []});
+ start_mfa(Args, {elixir, start_cli, []}, halt);
@@ -67,15 +67,15 @@
- {remote, Remote, start_mfa(Args, {?MODULE, sync_remote, [Parent, Ref]})}
+ {remote, Remote, start_mfa(Args, {?MODULE, sync_remote, [Parent, Ref]}, stop_evaluator)}
end.
@@
-start_mfa(Args, MFA) ->
- Opts = [{dot_iex, get_dot_iex(Args)}, {on_eof, halt}],
+start_mfa(Args, MFA, OnEof) ->
+ Opts = [{dot_iex, get_dot_iex(Args)}, {on_eof, OnEof}],
{?MODULE, start, [Opts, MFA]}.
With it, Ctrl+D and piped input end the client with status 0 and the remote node keeps running. Happy to open a PR.
- Lingua principale
- Elixir
- Stelle
- 26.7k
- Fork
- 3.7k
- Merge medio
- 8h 7m
- PR unite (30g)
- 60
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di elixir-lang/elixir
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
elixir-lang/elixir#15980 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
elixir-lang/elixir#15950 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
map_(get|put|update) ignore atom fields with static term() keyForse già presa @lukaszsamson l’ha presa 19 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
elixir-lang/elixir#15932 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
elixir-lang/elixir#15909 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 64/100
elixir-lang/elixir#15900 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di elixir-lang/elixir
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
ash-project/ash_ai#249 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
teslamate-org/teslamate#5856 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
marketing v9
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
revelrylabs/harmonium#715 ·
I maintainer di solito rispondono entro 1 giorno
-
Feature:Resolution
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
intellij-elixir/intellij-elixir#4396 ·
I maintainer di solito rispondono entro 1 giorno