Вы можете выполнить его в подоболочке с соответствующей ловушкой. Например, если вы хотите выполнить echo -e '\ nCommand done
в конце while true; правда; done
, вы можете использовать это:
mario@mario-K53SV:~$ (trap 'echo -e "\nCommand done"' EXIT; while true; do true; done)
Ловушка регистрирует команду, которую вы определили для события EXIT подоболочки. Скобки нужны для создания подоболочки. Имейте в виду, что если вы хотите обобщить это и поместить свои команды в переменные (например, MY_COMMAND = 'while true; do true; done'
), вам понадобится eval
для выполнения их правильно. Этот пример вывода показывает, где именно это полезно (без eval это не сработало бы):
mario@mario-K53SV:~$ YOUR_COMMAND="while true; do true; done"
mario@mario-K53SV:~$ EXECUTE_ON_EXIT="echo -e '\nCommand done'"
mario@mario-K53SV:~$ (trap 'eval ${EXECUTE_ON_EXIT}' EXIT; eval ${YOUR_COMMAND})
^C
Command done
mario@mario-K53SV:~$
Если вы хотите, это также можно использовать для автоматического закрытия вашего терминала в конце команда обработчика EXIT: просто включите kill -s SIGHUP $$
в конце вашего обработчика (например, EXECUTE_ON_EXIT = "echo -e '\ nCommand done'; kill -s SIGHUP $$"
).