Yad分叉并返回结果

Yad分叉并返回结果

我正在尝试使 yad 进程与另一个进程(一个安装程序,但这不是很重要)协作。

我在关键部分有这样的代码结构(简化):`

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.

我的问题是我需要的部分(除了结果之外)是列表选择。以前作为一个分叉,VAR=$(yad ...)除了 yad 退出代码之外,我还可以获取它,但现在我不知道如何在等待后将其传达给主进程。

答案1

事实证明退出代码并不是真正需要的。由于 yad 将所选行打印到标准输出,如果进程终止,则不会出现任何内容,因此我尝试了以下操作:

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

它可以工作,只是被杀死的进程喜欢写丑陋的 $PID Termated 行。

相关内容