Это были 10 часов, с тех пор как я задал вопрос, и я разработал решение... Примечание: Поскольку я ранее упомянул в комментарии (под вопросом), wait
не работает с этими процессами. Я предполагаю, что это вызвано тем, что эти 'замены процесса' не являются 'дочерними' процессами, которым я верю, что wait
ожидает. (Я попробовал wait
без args)....
Комментарии к его функциям и сбоям ценились бы. Я не вполне понимаю, как stdin взят zenity
и tr
когда echo
первая команда, но я просто думал, что дам ей движение... Это, кажется, работает (в этом случае), но действительно ли этот метод надежен?
Довольно вероятно, будут некоторые хорошо проверенные на практике методы там для занятия этим, таким образом, другие ответы были бы worthwile....
#!/bin/bash
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# Set up flag-files for processes to send PIDs to main process
# The first thing each process does is: echo -n "$BASHPID " > flag-file
for i in {1..2};do cp /dev/null "$listf".pid$i;done
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
eval locate $zenargs |tee \
>(echo -n "$BASHPID " > "$listf".pid1 ; \
zenity --progress --pulsate --auto-close) \
>(echo -n "$BASHPID " > "$listf".pid2 ; \
tr $'\x60' $X01 \
|sed -n "s/^\(.*\/\)\(.*\)/\1\2\n\2\n\1/p" \
|while IFS= read -r line ; do \
#
#
# process the data
#
#
done > "$listf" ) \
>/dev/null
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#### WAIT for processes to terminate
pids=$(cat "$listf".pid{1,2})
while [[ "$pids" == *[0-9]* ]] ; do
sleep .1 # GNU
for pid in $pids ; do
if ! kill -0 "$pid" 2>/dev/null; then
pids="${pids/$pid/}"
fi
done
done
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
cat "$listf"
#
Это еще не работает. Касательно: http://www.sysresccd.org/forums/viewtopic.php?f=14&t=4368, Но работается на http://savannah.gnu.org/bugs/?35238
Вы можете, хотя все еще загружают "основу".
menuentry "OK: SliTaz base" {
set isofile="/slitaz-4.0.iso"
loopback loop $isofile
linux (loop)/boot/bzImage initrd=/boot/rootfs4.gz lang=C kmap=uk rw root=/dev/null vga=normal autologin
initrd (loop)/boot/rootfs4.gz
}