Если разделители могут несколько раз появляться на строки, Вы могли бы использовать жемчуг вместо этого как:
between() {
perl -Tlne 'BEGIN{$b=shift;$e=shift}
print for /\Q$b\E(.*?)\Q$e\E/g' "$@"
}
И затем например:
$ echo "[b]test[e] foo [b]bar[e]" | between '[b]' '[e]'
test
bar
Можно также использовать его как:
between BEG END file1 file2...
Чтобы получить идентификатор окна в моей программе, я установил заголовок на что-то уникальное, затем запустил программу wmctrl
и разобрал ее вывод (а не скрипт оболочки, который запустил программу), а затем доложил об идентификаторе окна (чаще всего через файл).
Так как программа не продолжается до тех пор, пока не будут открыты окна, вам никогда не придётся долго ждать.
Это, конечно, требует, чтобы вы могли изменить мипрограмму
( т.е. скомпилировать из исходных текстов).