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'
).