afik wait will exit with that $? of returned On Mon, Mar 11, 2024, 20:13 Mischa Baars <mjbaars1977.bac...@gmail.com> wrote:
> That's not really an answer to the question. > > Also I don't think that gives you an exit status for each 'exit $i' > started. I need that exit status. > > > On Mon, 11 Mar 2024, 20:03 alex xmb sw ratchev, <fxmb...@gmail.com> wrote: > >> >> >> On Mon, Mar 11, 2024, 20:03 alex xmb sw ratchev <fxmb...@gmail.com> >> wrote: >> >>> the logic between my code >>> >>> 1 threads_max >>> 2 loop >>> 3 inside loop , do if run is > than threads_max then wait -n one >>> then 4 spawn thread >>> >> >> 3 if run isnt more than max , simply ignore and spawn thread in next cmd >> >> i dont get ur points >>> >>> On Mon, Mar 11, 2024, 19:55 Mischa Baars <mjbaars1977.bac...@gmail.com> >>> wrote: >>> >>>> Sorry. I mean: >>>> >>>> for (( i=0; i<32; i++ )); do exit $i & done; for (( i=0; i<32; i++ )); >>>> do wait -n; echo $?; done; >>>> >>>> doesn't function. With an ampersand instead of a semicolon. Why does it >>>> function when called from a script and why does it fail when called from >>>> the command line? >>>> >>>> On Mon, Mar 11, 2024 at 7:46 PM Mischa Baars < >>>> mjbaars1977.bac...@gmail.com> wrote: >>>> >>>>> You mean: >>>>> >>>>> for (( i=0; i<32; i++ )); do exit $i & wait -n; echo $?; done; >>>>> >>>>> with one command and one wait in a single loop. And this does execute >>>>> on the command line. How interesting! >>>>> >>>>> for (( i=0; i<32; i++ )); do exit $i; done; for (( i=0; i<32; i++ )); >>>>> do wait -n; echo $?; done; >>>>> >>>>> Because this doesn't and to be honest, I needed the pid and its index >>>>> to retrieve gcc's output from a log file array afterwards. >>>>> >>>>> On Mon, Mar 11, 2024 at 7:25 PM alex xmb sw ratchev <fxmb...@gmail.com> >>>>> wrote: >>>>> >>>>>> >>>>>> >>>>>> On Mon, Mar 11, 2024, 19:22 Mischa Baars < >>>>>> mjbaars1977.bac...@gmail.com> wrote: >>>>>> >>>>>>> On Mon, Mar 11, 2024 at 6:22 PM alex xmb sw ratchev < >>>>>>> fxmb...@gmail.com> wrote: >>>>>>> >>>>>>>> i also completly dont get ur issue >>>>>>>> >>>>>>>> f=( a.c b.c .. ) threads=$( nproc ) i=-1 r= >>>>>>>> >>>>>>>> while [[ -v f[++i] ]] ; do >>>>>>>> (( ++r > threads )) && >>>>>>>> wait -n >>>>>>>> gcc -c "${f[i]}" & >>>>>>>> done >>>>>>>> >>>>>>> >>>>>>> How nice! >>>>>>> >>>>>>> wait -n exit 1 & echo $? >>>>>>> >>>>>> >>>>>> doesnt need a pid >>>>>> 1 : 1 as i wrote it , excepts add 'wait' as new last line >>>>>> >>>>>> You got me the solution :) Except that wait expects a pid after -n. >>>>>>> >>>>>>> Maybe >>>>>>> >>>>>>> for (( i=0; i<32; i++ )); do exit 1 & wait -n $!; echo $?; done; >>>>>>> >>>>>>> is what you meant? The equivalence of sequential execution? >>>>>>> >>>>>>> First think, then do magic. >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>>> >>>>>>>> On Mon, Mar 11, 2024, 18:16 Mischa Baars < >>>>>>>> mjbaars1977.bac...@gmail.com> wrote: >>>>>>>> >>>>>>>>> Hello Paul, >>>>>>>>> >>>>>>>>> It seems I'm awake a little longer than you are. >>>>>>>>> >>>>>>>>> The second paragraph as you see it, belongs to 1) >>>>>>>>> The fourth paragraph as you see it, belongs to 2) >>>>>>>>> >>>>>>>>> The actual command invocations (a Makefile, a make.sh script) can >>>>>>>>> be found >>>>>>>>> in the attachment, as indicated on the first line of the mail. In >>>>>>>>> the >>>>>>>>> attachment there are two directories, one and two, belonging to 1) >>>>>>>>> and 2) >>>>>>>>> respectively. >>>>>>>>> >>>>>>>>> I'm not into Vulcan mindmelds, so I hope everything from the first >>>>>>>>> mail >>>>>>>>> makes sense to you and everyone on this mailing list now. >>>>>>>>> >>>>>>>>> Best regards, >>>>>>>>> Mischa Baars. >>>>>>>>> >>>>>>>>> On Mon, Mar 11, 2024 at 5:01 PM Paul Smith <psm...@gnu.org> wrote: >>>>>>>>> >>>>>>>>> > On Mon, 2024-03-11 at 09:56 +0100, Mischa Baars wrote: >>>>>>>>> > > I've attached the problem. It consists of two parts: >>>>>>>>> > > >>>>>>>>> > > 1) multi-threaded bash script and / or multi-threaded Makefile >>>>>>>>> > > >>>>>>>>> > > Running bash script functions as expected, but executing the >>>>>>>>> same >>>>>>>>> > > line of code with make and / or the command line, does not >>>>>>>>> function. >>>>>>>>> > > Perhaps someone could explain to me why? >>>>>>>>> > > >>>>>>>>> > > 2) passing a string argument from a bash script and / or >>>>>>>>> Makefile to >>>>>>>>> > > the gcc -D option >>>>>>>>> > > >>>>>>>>> > > Running the makefile functions as expected, but I have not >>>>>>>>> been able >>>>>>>>> > > to get similar code to work from a bash script. Can someone >>>>>>>>> please >>>>>>>>> > > explain to me what I'm doing wrong? >>>>>>>>> > >>>>>>>>> > I don't understand the problem. In the third paragraph above >>>>>>>>> you say >>>>>>>>> > the bash script works as expected and the makefile doesn't work, >>>>>>>>> but in >>>>>>>>> > the last paragraph you say that the makefile works as expected >>>>>>>>> but you >>>>>>>>> > can't get it to work in bash. >>>>>>>>> > >>>>>>>>> > Please provide actual command invocations (cut and pasted) >>>>>>>>> showing the >>>>>>>>> > output you received and explaining exactly what is wrong with it. >>>>>>>>> > >>>>>>>>> > But before you do that, be aware that make does NOT invoke >>>>>>>>> /bin/bash as >>>>>>>>> > its shell. It invokes /bin/sh. On some systems /bin/sh is >>>>>>>>> actually an >>>>>>>>> > alias for bash. On other systems it isn't. >>>>>>>>> > >>>>>>>>> > If you want your makefile to always use bash as its shell, you >>>>>>>>> should >>>>>>>>> > add an explicit: >>>>>>>>> > >>>>>>>>> > SHELL := /bin/bash >>>>>>>>> > >>>>>>>>> > to your makefile to force it. Maybe that will solve your >>>>>>>>> problem. If >>>>>>>>> > not we'll need details such as I mention above. >>>>>>>>> > >>>>>>>>> >>>>>>>>