Se essa coisa node ...;$bash
está sendo empurrada para o buffer de entrada pty por tmux
, então uma solução possível é configurar o terminal apropriadamente, para trap
terminal interrompe de tal maneira que afeta somente o shell interativo e usa novas linhas em vez de ;
.
stty noflsh; trap : INT
^ que deve lidar com os dois primeiros requisitos.
A diferença entre um ;
e um \n
é devido à maneira como as shells lêem entrada - um ;
ponto e vírgula é equivalente a uma nova linha na medida em que delimita as listas de comandos, mas difere na medida em que não delimita ler entrada. Por exemplo:
prompt$ cat; echo something
this the cat process
this the cat process
^C
prompt$
Mas porque eu configurei o driver tty não para liberar o buffer de entrada no recebimento de uma interrupção com stty noflsh
:
prompt$ cat^Jecho something
this is the cat process
this is the cat process
^C
something
prompt$
bash
readline
irá realmente exibir uma nova linha literal para a combinação de teclas CTRL+V
then CTRL+J
em vez da fuga mostrada acima, mas o efeito é o mesmo: quando a própria shell ignora interrupções mas seus filhos não, você pode executar linhas interrompidas da entrada tty em serial, desde que o próprio terminal não descarte completamente a entrada interrompida.