trap 'echo GOT ERROR, exiting' ERR
Просто сказать «выход» не означает, что это также верно;-)
Ловушка ERR
будет выполняться всякий раз, когда команда завершается ошибкой , независимо от того, завершается ли сценарий сразу после этого (, например. из-заset -e
)или нет:
$ bash -c 'trap "echo error, not exiting yet" ERR; false; echo DONE'
error, not exiting yet
DONE
В вашем случае сбойная команда может быть date
или aws
, но, скорее всего,sleep
(является внешней, а не встроенной -в команде ). sleep
завершает работу с не--нулевым статусом (= сбой, отсюда срабатывает ловушка ERR
), поскольку она также уничтожается сигналом, отправленнымtimeout
:timeout
сначала отправляет сигнал своему дочернему элементу, а затем для всей группы процессов это часть:
$ strace -e trace=kill timeout 1s bash -c 'echo $$; while :; do sleep 3600; done
'
4851
...
kill(4851, SIGTERM) = 0
kill(0, SIGTERM) = 0
...
Оболочка не будет запускать какие-либо ловушки до тех пор, пока после не завершится команда переднего плана, которую она ожидает; и если timeout
не сигнализирует всей группе процессов (, что может быть достигнуто с помощью опции --foreground
), эта команда переднего плана может не завершиться,и ловушка может не сработать:
$ timeout 1s bash -c 'trap "echo TERM caught" TERM; sleep 36000; echo DONE'
Terminated
TERM caught
DONE
$ timeout --foreground 1s bash -c 'trap "echo TERM caught" TERM; sleep 36000; echo DONE'
<wait and wait>
Мы выяснили, какое значение PCR меняется после вставки флешки и перезагрузки системы. Не привязываясь к этому значению PCR, нам удалось загрузить TPM со вставленным USB-накопителем.
В нашем случае PCR 1 (конфигурация BIOS )постоянно менялась при вставке USB-накопителя и перезагрузке системы.
Для запроса значений PCR мы использовали команду tpm2_pcrread
. Здесь перечислены значения PCR в sha1 и sha256. Мы перенаправили стандартный вывод значений PCR в файл до и после изменений и с помощью команды diff
отслеживали изменения между каждым файлом.