Resposta curta:
ssh -t fs "stty isig intr ^N -echoctl ; trap '/bin/true' SIGINT; sleep 1000; echo f" > foo
e pare o programa por CTRL + N.
Longa explicação:
- Você deve usar
stty
optionintr
para alterar seu servidor ou o caractere de interrupção local para não colidir uns com os outros. No comando acima, mudei o caractere de interrupção do servidor para CTRL + N. Você pode alterar seu caractere de interrupção local e deixar o do servidor sem nenhuma alteração. - Se você não quiser que o caractere de interrupção esteja em sua saída (e qualquer outro caractere de controle), use
stty -echoctl
. - Você deve assegurar que os caracteres de controle estão ativados no bash do servidor invocado pelo sshd. Se não, você pode acabar com processos ainda por aí depois de sair. %código%
- Você realmente captura
stty isig
signal porSIGINT
com a instrução vazia. Sem a armadilha, você não terá nenhuma stdout após o sinal SIGINT.