Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: "{ } always { }" construct and return in called functions



On Tue, May 19, 2015 at 7:04 AM, Bart Schaefer
<schaefer@xxxxxxxxxxxxxxxx> wrote:
> On May 18,  1:47pm, Peter Stephenson wrote:
> } Subject: Re: "{ } always { }" construct and return in called functions
> }
> } Hmmm...  I'm wondering if the fact you've started jobs is important.  It
> } shouldn't be, with the "&|", and the doshfunc() code is supposed
> } to make it irrelevant anyway by setting "stopmsg = 1".
>
> If you have some other job running in the background, the shell does
> not exit when 'exit' is called from a zle widget:
>
> torch%   unsetopt correct
> torch%   function _accept_and_quit() {
> function>   local -a buf
> function>   buf=(${(z)BUFFER})
> function>   if which $buf[1] >& /dev/null; then
> function then>     zsh -c "${BUFFER}" &|
> function then>     exit
> function then>   else
> function else>     zle -M "Command $buf[1] not found"
> function else>   fi
> function>   }
> torch%   zle -N _accept_and_quit
> torch% { echo BG: $RANDOM; sleep 30; } &
> [1] 7442
> BG: 12801
> torch% bindkey "^M" _accept_and_quit
> torch% { echo Here: $RANDOM; sleep 10 }
> _accept_and_quit:5: you have running jobs.
> torch% { echo Here: $RANDOM; sleep 10 }
> torch% Here: 29846
> echo not exited
> torch%
> zsh: warning: 1 jobs SIGHUPed
>
>
> It's the same effect as this:
>
> torch% { sleep 30 } &
> [1] 7457
> torch% exit
> zsh: you have running jobs.
> torch% exit
> zsh: warning: 1 jobs SIGHUPed
>
> The difference is that the "you have running jobs" message is suppressed
> when exit is called from a zle widget.
>
> If Mikael adds "unsetopt checkjobs" he should get the effect he wants.
> He might also want "setopt nohup" to prevent the death of whatever it
> is that's keeping the shell alive.

A good theory, but
zshrun ~> echo $options[checkjobs]
off
I've always had that option turned off.

Also, since the command is run with &| then surely there are no jobs either way?

> The part about "commands are randomly ran two or three times" does not
> happen for me -- though I don't know exactly what it means.  Does it
> mean you can invoke _accept_and_quit two or three times, or does it
> mean that running _accept_and_quit once mysteriously launches the same
> job two or three times?

It seems to be run once in the background by the widget, and then
another one in the foreground that I can ctrl-c out of. I only press
enter the one time.

-- 
Mikael Magnusson



Messages sorted by: Reverse Date, Date, Thread, Author