| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
zsh typically runs the final command in a pipeline in the main shell
instead of a subshell. However, POSIX specifies that all commands in a
pipeline run in a subshell, but permits zsh's behavior as an extension.
The default /bin/sh implementations on various Linux distros and the
BSDs always use a subshell for all components of a pipeline.
Since zsh may be used as /bin/sh in some cases (such as macOS Catalina),
it makes sense to have the common sh behavior when emulating sh, so do
that by checking for being the final item of a multi-item pipeline and
creating a subshell in that case.
From the comment above execpline(), we know the following:
last1 is a flag that this command is the last command in a shell that
is about to exit, so we can exec instead of forking. It gets passed
all the way down to execcmd() which actually makes the decision. A 0
is always passed if the command is not the last in the pipeline. […]
If last1 is zero but the command is at the end of a pipeline, we pass
2 down to execcmd().
So there are three cases to consider in this code:
• last1 is 0, which means we are not at the end of a pipeline, in which
case we should not change behavior.
• last1 is 1, which means we are effectively running in a subshell,
because nothing that happens due to the exec is going to affect the
actual shell, since it will have been replaced. So there is nothing
to do here.
• last1 is 2, which means our command is at the end of the pipeline, so
in sh mode we should create a subshell by forking.
input is nonzero if the input to this process is a pipe that we've
opened. At the end of a multi-stage pipeline, it will necessarily be
nonzero.
Note that several of the tests may appear bizarre, since most developers
do not place useless variable assignments directly at the end of a
pipeline. However, as the function tests demonstrate, there are cases
where assignments may occur when a shell function is used at the end of
a command. The remaining assignment tests simply test additional cases,
such as the use of local, that would otherwise be untested.
|
| |
|
|
|
|
| |
"error in flags", identify the location of the parse error.
|
| |
|
| |
|
| |
|
|
|
|
| |
complist
|
| |
|
| |
|
| |
|
|
|
|
| |
expression evaluted to zero.
|
|
|
|
| |
workers/48146 affecting it.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Mikael Magnusson: 47382: Completion for 47364
|
|
|
|
|
|
|
|
|
|
|
| |
Fixed a regression introduced by workers/30496 (5.0.3) whereby %2K would
no longer be the equivalent of %K{2} (%K{green}) in prompt expansion.
That was one missing case where the is_fg flag was not passed along to
match_colour() after code factorisation.
Add tests for the different syntax variants, using echoti
as a reference.
|
|
|
|
|
|
|
|
|
|
|
| |
Actual behaviour:
% is-at-least 5.8.0.2 5.8 && echo yes || echo no
yes
% is-at-least 5.8.0.2 5.8.0.0 && echo yes || echo no
no
Expected behaviour: Both commands should have printed "no".
|
|
|
|
|
|
| |
repeat count use $?.
It's an arithmetic expression.
|
|
|
|
| |
cleans up its tempfiles.
|
|
|
|
| |
files in the root directory.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
processes the current directory rather than the root directory.
The bug will be fixed in the next commit.
|
| |
|
|
|
|
| |
functional change.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The test harness created tempfiles with a predictable names and sourced
them without verifying they had been created by itself. This opened
anyone who ran the test suite to a symlink attacks from other local
users on the build machine.
Fix this by creating the file whilst NO_CLOBBER and ERR_EXIT are both in
scope, to ensure that we'll abort unless the file really was created as
expected.
Put the existing rm(1) call in a try/always block to help it be unlinked
on test failures, thus reducing the chances of the NO_CLOBBER check
triggering on tempfiles created by earlier test suite runs.
I had first tried to fix this by using the
.
() { ... } =(:)
.
idiom, but couldn't get that to work: it broke the %prep code of X03
with ZTST_verbose unset (its default value) but not with ZTST_verbose=3.
(I tried to set the latter to debug zpty_flush.)
While there, add a needed-in-principle-but-noop-in-this-specific-case (q).
Indentation will be restored in the next commit.
|
| |
|
| |
|
|
|
|
|
|
| |
add-zle-hook-widget support for multiple hook functions.
See workers/46004 for the use-case.
|
|
|
|
|
|
| |
This occurs with SH file expansion ordering.
Add test.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is useful when multiple plugins add region_highlight entries and
subsequently want to remove only their own entries. Without this
functionality, recognizing one's region_highlight entries is not trivial
because the 'start' and 'end' offsets are modified by editing of $BUFFER
and the highlight specification may not be unique or distinctive.
The tweaks are as follows:
- Change zfree() to zsfree() per workers/46070.
- Remove the mem.c hunk, as it changed the signature of only one out of
two alternative definitions of zsfree(). (The definition that hunk
touched is the one that's not used by default.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The new output is:
./Test/B02typeset.ztst: starting.
Test ./Test/B02typeset.ztst was expected to fail, but passed.
Was testing: this is the description that's after the colon on in the ztst file
./Test/B02typeset.ztst: test XPassed.
**************************************
0 successful test scripts, 1 failure, 0 skipped
**************************************
make[1]: *** [Makefile:190: check] Error 1
make: *** [Makefile:263: check] Error 2
The new function is deliberately very similar to ZTST_testfailed() just
above it.
|
|
|
|
|
|
|
| |
Treat as white space.
This is required for compatibility and previously had no use in zsh
as it generated an error.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Also, write/extend docstrings for sepjoin() and zjoin().
|