En estos días, la forma canónica de ejecutar un demonio cuando un dispositivo está conectado parece ser crear una unidad systemd para el demonio y agregar una entrada udev para el dispositivo que hace referencia a esta unidad. Por ejemplo, cree un archivo /etc/udev/rules.d/90-my.rules
con la línea
ACTION=="add", KERNEL=="ttyACM*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="myacm@%k.service"
y un archivo /etc/systemd/system/myacm@.service
con
[Unit]
Description=my serial daemon for ttyACM0
[Service]
ExecStart=/bin/myscript %i
Es posible que necesite sudo udevadm control --reload
y sudo systemctl daemon-reload
. Cuando conecte su dispositivo, su secuencia de comandos debe ejecutarse con el parámetro ttyACM0
si ese es su nombre. Compruebe los archivos de registro en busca de errores.
Consulte la sección man 7 daemon
Nuevos -Daemons de estilo y Dispositivo -Activación basada , así como man systemd.device
.
В системах GNU это сработает для двух шаблонов, если относительный порядок совпадений не имеет значения:
grep -rlZ abc /dir/ | xargs -r0 grep -l def
Вы можете связать это, если у вас больше паттернов, чем два:
grep -rlZ abc /dir/ | xargs -r0 grep -lZ def | xargs -r0 grep -l xxx
или используйтеfind
:
find /dir/ -type f -exec grep -q abc {} \; -exec grep -q def {} \; -print
Это не очень эффективно, и для этой задачи может подойти другой инструмент, кроме grep
.
Гораздо более упрощенная версия grep
в режиме --null-data
(-z
)заключалась бы в использовании жадного квантификатора для сопоставления любого количества новых строк, как
grep -ozP 'abc(.*\n.*){1,}def' file
Или используйте pcregrep (, предоставленный проектом PCRE ), который по умолчанию использует возможности регулярных выражений PCRE. -M
включает режим согласования нескольких строк -.
pcregrep -M 'abc(.*\n.*){1,}def' file
На всякий случай, если у вас могут быть еще более сложные условия, мы можем использовать Awk
awk 'BEGIN{RS="\0"}
/def/ && /abc/ {print FILENAME}' *
Где:
RS="\0"
определяет разделитель регистров, отсутствующий в файле (= файл slurp )и condition {print FILENAME}
выводит файлы, соответствующие условию