Portál AbcLinuxu, 10. listopadu 2025 20:05
Řešení dotazu:
&), jak ses jistě dočetl v man stránce bashe.
(for x in prvniadresar/*; do prevednamp3 "$x"; done) & for x in druhyadresar/*; do prevednamp3 "$x"; done; wait
Dobry den.
Napsal jsem si na podobne pripay mustr:
#!/bin/bash
POTOMKU=5 #tady se nastavyje kolik tam potomku
TMPFILE="$(mktemp -t -d ${0/*\//}.XXXXXXXXXX)" || exit 1
mkfifo "$TMPFILE/fifo"
#Ted bychom meli mit fifo v nasem tempu
#Napoustime si potomky
for ((y=1;y<=${POTOMKU};y++))
do
while i=$(cat "$TMPFILE/fifo" 2> /dev/null)
do
[ "${i}" ] && (
#VASE FUNKCE
echo "${y}->${i}<-"
)
done &
done
#Ze standartniho vstupu cteme po radcich a cpeme jednotlive do fifo
while read radka; do
echo ${radka} > "$TMPFILE/fifo"
sleep 0 #zpozdeni je nutno naladit, aby to predavalo potomkum pokud mozno po jednom radku, me staci ta nula
done
#pockame si, az se postupne dostanou vsechny potomci do faze, kdy cekaji na cat a tam je zabijeme
ps --ppid $$ -o "%p %c" --no-headers | sed -e "s/\([0-9]\+\) ${0/*\//}$/\1/ p" -ed |\
while read i; do
until kill $(ps --ppid "$(ps --ppid ${i} -o "%p" --no-headers)" -o "%p %c" --no-headers | sed -e "s/\([0-9]\+\) cat$/\1/ p" -ed) 2>/dev/null; do sleep 0.1; done
done
wait
rm "$TMPFILE/fifo"
rmdir $TMPFILE
Ma to ale nekolik ALE:
VASE FUNKCE musi ucekavat, ze prijde vice nez jeden radek. - je tam proste jednoduse neresitelna race condition
Je to radkove orientovano - souborovy system ale povoluje vyceradkove nazvy souboru.
Vyplati se to jen nekdy .....
ocekava to na stdin, takze to spustite treba: ls ../ | ./worker, pokud si to teda nazvete worker
Marek
WAV=$(wildcard *.wav)
MP3=$(WAV:.wav=.mp3)
LAMEOPTS=--preset studio
all: $(MP3)
%.mp3: %.wav
@echo '$@'
@lame $(LAMEOPTS) $< $@
Pak třeba: cd wavy; make -f /moje/Makefile -j 2
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.