Мониторинг файла и выполнение команды на основе изменений в этом файле

разъем _lsp [опции] [строка фильтра]

может печатать все порты jack (Audio и MIDI ).


Из справки -текст:

Список активных портов Jack и дополнительная информация. При необходимости отфильтруйте порты, соответствующие ВСЕМ строкам, указанным после любых параметров.

Display options:
        -s, --server    Connect to the jack server named 
        -A, --aliases         List aliases for each port
        -c, --connections     List connections to/from each port
        -l, --latency         Display per-port latency in frames at each port
        -L, --latency         Display total latency in frames at each port
        -p, --properties      Display port properties. Output may include:
                              input|output, can-monitor, physical, terminal

        -t, --type            Display port type
        -h, --help            Display this help message
        --version             Output version information and exit

Для получения дополнительной информации см.http://jackaudio.org/


для подключения портов из командной строки можно использовать jack_connect.

с помощью jack_lspвы можете получить подобный вывод, показывающий все текущие порты jack:

system:capture_1
system:capture_2
system:playback_1
system:playback_2
system:midi_capture_1
system:midi_playback_1
amsynth:L out
amsynth:R out
amsynth:midi_in
system:midi_playback_2
system:midi_capture_2

в качестве примера вы можете соединить system:midi_capture_1с amsynth:midi_in, запустив:jack_connect system:midi_capture_1 amsynth:midi_in

Чтобы увидеть, какие порты подключены, вы можете использовать jack_lsp -cи получить вывод, подобный этому:

system:capture_1
system:capture_2
system:playback_1
   amsynth:L out
system:playback_2
   amsynth:R out
system:midi_capture_1
   amsynth:midi_in
system:midi_playback_1
amsynth:L out
   system:playback_1
amsynth:R out
   system:playback_2
amsynth:midi_in
   system:midi_capture_1
system:midi_playback_2
system:midi_capture_2

0
27.01.2021, 03:25
1 ответ

Попробуйте:

while :; do awk '/keyword/{print "found"}'; sleep 1; done < temp.txt

или если вы хотите выполнить команду оболочки, а не просто напечатать «найдено»:

while :; do awk '/keyword/{system("echo \047found\047"}'; sleep 1; done < temp.txt

В нем используются обязательные команды POSIX, и он будет работать в любой оболочке на любом компьютере Unix. Например:

$ echo foo > temp.txt

$ while :; do awk '/keyword/{print "\n>>> found <<<\n"}'; sleep 1; done < temp.txt &
[1] 16520

$ echo keyword >> temp.txt
$
>>> found <<<

См.https://unix.stackexchange.com/a/629912/133219для получения дополнительной информации об этом подходе.

Если «ключевое слово» не часто встречается в файле, и вы заботитесь о том, чтобы этот цикл вращался в фоновом режиме с использованием циклов ЦП, вы можете немного усложнить значение сна, удваивая его до некоторого максимального значения каждый раз через цикл, когда ключевое слово не найдено, поэтому код тратит гораздо больше времени на сон, чем на выполнение, что-то вроде этого кода bash, но может быть написано для любой оболочки:

secs=1
maxSecs=60
while :; do
    if awk '/keyword/{print "found"; f=1} END{exit !f}'; then
        secs=1
    else
        if (( (2*secs) < maxSecs )); then
            secs=$(( 2*secs ))
        else
            secs=$maxSecs
        fi
    fi
    sleep "$secs"
done < temp.txt

Это будет запускать awk один раз в секунду, пока «ключевое слово» появляется в вашем файле так быстро, а когда это не так, он будет постепенно переключаться на вызов awk один раз в минуту, пока «ключевое слово» не начнет снова появляться, а затем начнется снова вызов awk раз в секунду. Очевидно, установите maxSecs на любое значение, которое вам нравится -5, 30, 3600, что угодно.

3
18.03.2021, 22:34

Теги

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