Параметр правила udev для шаблона systemd

Необходимо выполнить grep для каждого найденного файла.

-lуказывает grepпечатать имя файла только тогда, когда regexнайден.

Если имена файлов не содержат символов /, попробуйте это:

find a_directory -type f -name \*.py.txt -exec sh -c '
  for fname; do
    basename="${fname##*/}"
    grep -lF "@code prefix.${basename%.*}" "${fname}"
  done' sh {} +

см. man bashдля пунктов ниже:

  • "${fname##*/}"равно file1.py.txt, если fname==a_directory/file1.py.txt
  • "${basename%.*}"равно file1.py, если basename==file1.py.txt
3
13.11.2019, 10:47
2 ответа

В качестве обходного пути я могу создать собственную переменную среды в правиле udev:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1015", \
ATTRS{serial}=="000621000000", SYMLINK+="ttymkw", TAG+="systemd", \ 
ENV{MY_ID}="000621000000", \
ENV{SYSTEMD_USER_WANTS}+="offnet-uart-log@$env{MY_ID}.service"

(обратная косая черта для удобочитаемости, это должно быть в одной строке.)

Или просто напишите строку сразу после @.

Однако в этом нет необходимости.

0
27.01.2020, 21:20

В качестве другого обходного пути, если служба systemd вызывает скрипт в своем операторе ExecStart , тот же udevadmвызов, показанный в вопросе, может быть включен в этот скрипт для извлечения ID_SERIAL_SHORTчерез grep.

1
27.01.2020, 21:20

Теги

Похожие вопросы