Запуск и закрытие приложения на основе другого приложения

Поскольку запрошенный вывод, по-видимому, имеет одну строку вывода для каждой строки ввода, где строка просто копируется, если она совпадает, и заменяется, если нет, есть лучшие способы сделать это, чем чтение файла 5 раз и распечатать строки в том порядке, в котором они находятся в файле поиска _kwd.sh, а не во входном файле.

Вместо этого вы должны обрабатывать входной файл по одной строке за раз. Есть много инструментов, которые могут это сделать. Например

#!/bin/sh
sed -e '/kwd1/{p;d}
        /kwd2/{p;d}
        /kwd3/{p;d}
        /kwd4/{p;d}
        /kwd5/{p;d}
        s/.*/string/' search_file.txt

в котором говорится, что для каждого совпадающего ключевого слова распечатайте строку, затем отбросьте ее и перейдите к следующей строке. Если он проходит через все ключевые слова и ни одно из них не соответствует, измените строку на строку (и затем неявно напечатайте ее ).

Вы можете использовать awkс чем-то вроде этого

 #!/bin/sh
 awk '{ if (/kwd1|kwd2|kwd3|kwd4|kwd5/) { print } else {print "string" }}' search+file.txt

У вас может быть чистая реализация оболочки

 #!/bin/sh
 while read -r line
 do
     case "$line" in
     (*"kwd1"*|*"kwd2"*|*"kwd3"*|*"kwd4"*|*"kwd5"*) printf '%s\n' "$line" ;;
     (*) printf '%s\n' "string" ;;
     esac
 done < search_file.txt

Вы также можете использовать perl, ruby, python.

2
21.04.2021, 20:23
1 ответ

Просто запустите Quodlibet в текущей оболочке, а не в подпроцессе -:

#!/bin/bash
trap "exit" INT TERM ERR
trap "kill 0" EXIT

(sleep 2 && conky) &

quodlibet

[обновление] Вы упомянули, что хотите запустить этот скрипт из файла .desktopв графической среде. @fra -san сообщил мне, что каждый процесс, запущенный таким образом, скорее всего, унаследует группу процессов своего родителя, и, как следствие, kill 0убьет этот процесс запуска и (потенциально )все его процессы. началось. Это, конечно, не то, что вы хотите.

Решение этой проблемы состоит в том, чтобы запустить ваш скрипт с setsid, чтобы создать новую группу процессов, посвященную ему:

setsid /path/to/script.sh
4
28.04.2021, 22:51

Теги

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