mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-14 14:03:58 +00:00
Set $status after while
depending on whether loop was entered
Closes #4982.
This commit is contained in:
parent
8ff0e7441f
commit
f5083d7bab
2 changed files with 9 additions and 0 deletions
|
@ -69,6 +69,7 @@ fish 3.0 is a major release which brings with it both improvements in functional
|
||||||
- Autosuggestions try to avoid arguments that are already present in the command line.
|
- Autosuggestions try to avoid arguments that are already present in the command line.
|
||||||
- Variables may be used inside commands (#154).
|
- Variables may be used inside commands (#154).
|
||||||
- A `hash` function has been added for compatibiility with `sh` and `bash`
|
- A `hash` function has been added for compatibiility with `sh` and `bash`
|
||||||
|
- `while` sets `$status` to a more useful value (#4982)
|
||||||
|
|
||||||
## Other significant changes
|
## Other significant changes
|
||||||
- Command substitution output is now limited to 10 MB by default (#3822).
|
- Command substitution output is now limited to 10 MB by default (#3822).
|
||||||
|
|
|
@ -528,6 +528,7 @@ parse_execution_result_t parse_execution_context_t::run_while_statement(
|
||||||
tnode_t<g::andor_job_list> condition_boolean_tail = header.child<3>();
|
tnode_t<g::andor_job_list> condition_boolean_tail = header.child<3>();
|
||||||
|
|
||||||
// Run while the condition is true.
|
// Run while the condition is true.
|
||||||
|
bool loop_executed = false;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
// Check the condition.
|
// Check the condition.
|
||||||
parse_execution_result_t cond_ret =
|
parse_execution_result_t cond_ret =
|
||||||
|
@ -547,6 +548,8 @@ parse_execution_result_t parse_execution_context_t::run_while_statement(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loop_executed = true;
|
||||||
|
|
||||||
// Push a while block and then check its cancellation reason.
|
// Push a while block and then check its cancellation reason.
|
||||||
while_block_t *wb = parser->push_block<while_block_t>();
|
while_block_t *wb = parser->push_block<while_block_t>();
|
||||||
this->run_job_list(contents, wb);
|
this->run_job_list(contents, wb);
|
||||||
|
@ -569,6 +572,11 @@ parse_execution_result_t parse_execution_context_t::run_while_statement(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (loop_executed) {
|
||||||
|
proc_set_last_status(STATUS_CMD_OK);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue