Условное выполнение - запуск постоянных подпроцессов и сопрограмм

Установка insert-tab тег ко лжи будет препятствовать тому, чтобы вкладка была вставлена, когда не будет никаких символов слева от курсора.

zstyle ':completion:*' insert-tab false

3
19.10.2015, 11:12
2 ответа

Я обнаружил несколько похожих темы к этому, которые рассматривают возможность использования таких вещей, как xdotool и wmctl , с целью тестирования запуска постоянного оконного приложения или другого постоянного подпроцесса. Но их использование кажется ненужным усложнением. Приведенное ниже решение допускает условное выполнение постоянного подпроцесса. Он использует продолжительность сна в полсекунды. Если интересующий подпроцесс потребует больше времени для успешного запуска, то эту продолжительность необходимо будет соответственно увеличить.

Исходный файл Bash launch

#/usr/bin/env bash

# launch : will allow launching a windowed application or persistent
# sub-process in the background so that conditional execution can be
# applied to determine whether or not it has launched successfully -
# dependencies: GNU coreutils (sleep), util-Linux (kill)

# usage: ./launch process arg_1 .. arg_n && echo TRUE || echo FALSE

$@ &>/dev/null & sleep 0.5 && kill -0 $! 2>/dev/null

# end file

Итак:

$ ./launch mupdf example.pdf && echo TRUE || echo FALSE
TRUE

$ ./launch mupdf nofile.pdf && echo TRUE || echo FALSE
FALSE

В качестве постскрипта к этой информации я подумал, что было бы полезно включить совет mikeserv в комментарии к открытию Почта.

В то время как вышеупомянутая конструкция выполняет непосредственную задачу, mikeserv указывает, что она может привести к другим проблемам, поскольку она не передает сигнал вызывающему сценарию; вместо этого он игнорирует и отбрасывает его. Это очень важное наблюдение.

Сигналы являются ключевым элементом межпроцессного взаимодействия и могут привести к возможности создания сценариев, управляемых событиями. Таким образом, для более надежных и эффективных сценариев mikeserv предлагает следующее для перехвата сигнала и его распространения:

{ mupdf some.pdf || kill -"$(($?&127))" "$$"; } &

где $? & 127 разрешает выполнение действий от 1 до 128 возможных сигналов ( POSIX), в моей системе Debian их 64, поэтому маска сигнала может быть $? & 63 .


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

1
27.01.2020, 21:40

Como una sola línea -:

mupdf example.pdf & echo mupdf is now in the background; wait $! && echo FINISHED successfully
-1
27.01.2020, 21:40

Теги

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