Estranho, o que eu não entendo é por que seu segundo exemplo retorna ao shell (e não consigo reproduzir isso).
Quando você executa ssh -S none -fNR 13018:localhost:22 example.com | cat
, um processo ssh permanece em segundo plano. Ainda tem a extremidade de gravação do tubo aberta. Portanto, cat
ainda não viu um fim de arquivo em sua entrada padrão e, portanto, continua lendo.
Pressionando Ctrl + C mata o processo cat
(é a única parte da tarefa que ainda está em execução, já que o processo ssh no plano de fundo foi movido para o seu próprio grupo de processos e o processo ssh em primeiro plano termina assim que é bifurcado). Se o processo ssh de fundo tentou gravar em sua saída padrão (o que não acontecerá, devido ao -N
), a gravação seria falsa com EPIPE (blocos ssh SIGPIPE). O processo cat
também sairia se você matasse o processo ssh em segundo plano.