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

Re: =cmd cancels the whole code block



Stephane Chazelas wrote:
> ~$ zsh -f
> % a==a
> zsh: a not found
> % echo $?
> 1
> % a==a || a==b
> zsh: a not found
> % a==a; echo $?
> zsh: a not found
> % (a==a); echo $?
> zsh: a not found
> 1
> % {
> cursh> a==a
> cursh> echo foo
> cursh> echo bar
> cursh> }
> zsh: a not found
> %
> 
> should it be considered as a normal behavior?

Yes, if the option NOMATCH is set, as it is by default.  It is supposed
to abort the entire sequence of commands, because it is designed to
detect errors.

> Revealed following a recent usenet thread in comp.unix.shell.
> For one trying to do:
> 
> { EDITOR==emacs || EDITOR==vi; } 2> /dev/null

You have to turn it off and detect whether the expansion took place.

setopt nonomatch
EDITOR==emacs
[[ $EDITOR = =* ]] || EDITOR==vi

Or many possibly equivalents.

The latest version of the shell allows you to do

{ EDITOR==emacs 2>/dev/null } always { TRY_BLOCK_ERROR=0 } || EDITOR==vi

but it's hardly worth it in a case like this.

-- 
Peter Stephenson <pws@xxxxxxx>                  Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK                          Tel: +44 (0)1223 692070


**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
the system manager.

This footnote also confirms that this email message has been swept by
MIMEsweeper for the presence of computer viruses.

www.mimesweeper.com
**********************************************************************



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