Portál AbcLinuxu, 5. května 2025 00:48
Ř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.