Основываясь на принятом ответе maxschlepzig (и идее из принятого ответа на https://superuser.com/questions/270529/monitoring-a-file-until-a-string-is-found), я предлагаю следующий улучшенный (, на мой взгляд, )ответ, который также может работать с тайм-аутом:
# Enable pipefail, so if the left side of the pipe fails it does not get silently ignored
set -o pipefail
( timeout 120 inotifywait -e create,open --format '%f' --quiet /tmp --monitor & ) | while read i; do if [ "$i" == 'sleep.txt' ]; then break; fi; done
EXIT_STATUS=$?
if [ "${EXIT_STATUS}" == '124' ]; then
echo "Timeout happened"
fi
В случае, если файл не создается/не открывается в течение заданного тайм-аута, статус выхода будет 124 (в соответствии с документацией по тайм-ауту (справочная страница )). В случае, если он будет создан/открыт, статус выхода будет 0 (успех ).
Да, inotifywait запускается в подчиненной оболочке -таким образом, и эта вспомогательная оболочка -завершает работу только по истечении времени ожидания или при завершении основного сценария (, в зависимости от того, что наступит раньше ).
В большинстве случаев проблем быть не должно; исключения могут включать темы с брендингом (, но я не проверял ).
Вы найдете условия лицензии для различных файлов, задействованных в большинстве, если не во всех дистрибутивах, включенных в дистрибутив. Для дистрибутивов на основе Debian -найдите пакеты, использующие dpkg -S ${file}
, а затем просмотрите /usr/share/doc/${package}/copyright
. Для дистрибутивов на основе Fedora -или RHEL -найдите соответствующие пакеты с помощью rpm -q --whatprovides ${file}
, затем просмотрите/usr/share/licenses/${package}
(и проверьте вывод rpm -qL ${package}
, если необходимо.