Если вы не хотите, чтобы это происходило, поместите tee
в фоновом режиме, чтобы оно не входило в группу процессов, получающих SIGINT
.Например, в bash 4.1 или новее вы можете запустить замену процесса с автоматически назначаемым файловым дескриптором, предоставляющим дескриптор:
#!/usr/bin/env bash
# ^^^^ NOT /bin/sh; >(...) is a bashism, likewise automatic FD allocation.
exec {log_fd}> >(exec tee log.txt) # run this first as a separate command
python3 -u myfile >&"$log_fd" 2>&1 # then here, ctrl+c will only impact Python...
exec {log_fd}>&- # here we close the file & thus the copy of tee.
Конечно, если вы поместите эти три команды в сценарии , весь сценарий становится вашим процессом переднего плана, поэтому требуются разные методы.Таким образом:
python3 -u myfile > >(trap '' INT; exec tee log.txt) 2>&1