Вы были на правильном пути с trap
. То, что вы хотите, это следующее:
trap "stty erase ^?" SIGCHLD
Вы можете добавить это к .bashrc
. Обратите внимание, что это будет выполняться, когда любой подпроцесс завершится.
Это будет работать только в интерактивных сессиях. Для неинтерактивных сеансов bash
не включите управление заданиями по умолчанию, поэтому вам нужно будет запустить set -o monitor
сначала. Но я сомневаюсь, что вам понадобятся возвраты в неинтерактивных скриптах.
SIGCHLD
отправляется родительскому процессу при выходе из подпроцесса.
Альтернативный метод заключается в том, чтобы обернуть другую оболочку в скрипт, например:
#!/bin/sh tcsh stty erase ^?
Затем, если вы запустите свою оболочку через скрипт, скрипт запустит stty erase
команду после выхода из оболочки. Это менее вероятно, будет иметь побочные эффекты, чем глобальный trap
обработчик, но, конечно, он будет работать, только если вы запускаете скрипт каждый раз (или создаете псевдоним для этого, например alias 'tcsh' '~/launch-tcsh.sh'
).