Você estava no caminho certo com trap . O que você quer é o seguinte:
trap "stty erase ^?" SIGCHLD
Você pode adicionar isso a .bashrc . Observe que isso será executado quando o qualquer subprocesso terminar.
Isso só funcionará em sessões interativas. Para sessões não interativas, bash não ativará o controle de tarefas Por padrão, você precisará executar set -o monitor primeiro. Mas duvido que você precise de backspaces em scripts não interativos.
SIGCHLD é enviado para o processo pai sempre que um subprocesso é encerrado.
Um método alternativo é envolver seu outro shell em um script, como:
#!/bin/sh
tcsh
stty erase ^?
Em seguida, se você iniciar seu shell por meio do script, o script executará o comando stty erase após a conclusão do shell. Isso é menos provável de ter efeitos colaterais do que um manipulador global trap , mas é claro que só funcionará se você iniciar o script toda vez (ou criar um alias para fazer isso, por exemplo, alias 'tcsh' '~/launch-tcsh.sh' ).