Yad forking e retornar resultados

0

Estou tentando fazer com que um processo de yad colabore com outro (um mounter, mas isso não é muito importante).

Eu tenho uma estrutura de código como essa (simplificada) na parte crítica: '

yad --list --button=gtk-close:1 --button=gtk-ok:0 "${CONF_LIST[@]}" 2>/dev/null &
yad_pid=$!
#3 is the file descriptor of the named pipe of the other process
{ read -u 3 line && kill -USR2 $yad_pid 2>/dev/null; } & pidof_killer=$!
wait $yad_pid
result=$?
kill $pidof_killer 2>/dev/null
#do something with result.

Meu problema aqui é que parte do que eu preciso (além do resultado) é a seleção da lista. Antes de ser uma bifurcação, eu poderia fazer VAR=$(yad ...) e obtê-lo além do código de saída do yad, mas agora não sei como comunicá-lo ao processo principal após a espera.

    
por i30817 01.07.2017 / 11:15

1 resposta

0

Acontece que o código de saída não foi realmente necessário. Como yad imprime a linha selecionada para stdout e nada lá se o processo morreu, tentei fazer isso:

SELPIPE=$(mktemp -u -p "${XDG_RUNTIME_DIR}" "${0##*/}.XXXXXXXXXX")
mkfifo "$SELPIPE"
exec 4<> "$SELPIPE"
yad ... 2>/dev/null 1>&4 &
yad_pid=$!

#wait for notification
( read -u 3 line && kill -USR2 $yad_pid ) 2>/dev/null &
pidof_killer=$!
#wait for yad termination and read its stdout on a timeout. If triggers timeout, it's empty
wait $yad_pid
read -u 4 -t 1 SEL
exec 4>&- #close FD4

kill $pidof_killer 2>/dev/null
#etc

Funciona, exceto que os processos mortos gostam de escrever linhas $ PID Terminadas.

    
por 01.07.2017 / 13:38

Tags