разъем _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
Попробуйте:
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, что угодно.