Не упустите шанс установить синтаксические анализаторы XML/HTML, так как они будут подходящим инструментом для таких данных.
На данный момент вотawkобходной путь для вашего конкретного случая:
awk -F'[<>]' '{ for(i=1;i<=NF;i++) { if($i~/DOCNUM|MESTYP|SNDPRN/) a[$i]=$(i+1) }
print "XML",a["DOCNUM"],a["MESTYP"],a["SNDPRN"] }' OFS=',' your.xml
Выход:
XML,123456,,0000929674
XML,12345,,0000929677
Ваше первоначальное решение не работает, поскольку оболочка ожидает остановки процесса slock, прежде чем продолжить. Самое простое (, но не лучшее )решение сделать команду slock &
, которая позволяет продолжить процессы после. Однако это не гарантирует, что slock завершит работу до того, как устройство приостановится.
«Правильный» способ сделать это — использовать xss-lock
для вызова slock и использовать xset
для блокировки экрана по команде. Оба они могут быть найдены в репозиториях Void. xss-lock slock
установит xss -lock для использования slock для блокировки.
Этот должен работать без каких-либо дополнительных скриптов, так как предполагается, что блокировка xss -нормально работает при приостановке. Однако события на основе suspend -всегда были глючными, поэтому дополнительная активация через xset — неплохая идея.
Примером /etc/zzz.d/suspend/slock
может быть
#!/bin/sh
xset s activate
Аналогичный скрипт можно было бы поместить в соответствующий файл «резюме», но предыдущая проблема с разблокированным экраном появлялась до экрана блокировки.
Решил эту проблему вот так:
/etc/zzz.d/suspend/01
#!/bin/sh
doas -u ds xsecurelock &
sleep 2
/etc/doas.conf
permit persist :wheel
permit nopass root as ds cmd xsecurelock
permit nopass :wheel as root cmd zzz
permit nopass :wheel as root cmd ZZZ
permit nopass keepenv root as root
Вы можете попробовать определить $DISPLAY для пользователя root в скрипте приостановки, но я слишком глуп, чтобы решить эту проблему.