set error code on failed command substitution to 255 instead of -1

the exit status ought to be in 0-255, e.g. exit -1
This commit is contained in:
Johannes Altmanninger 2020-01-17 15:08:14 +01:00
parent 4170e8cff2
commit b62fa53807
2 changed files with 13 additions and 2 deletions

View file

@ -1157,7 +1157,12 @@ static int exec_subshell_internal(const wcstring &cmd, parser_t &parser, wcstrin
// If the caller asked us to preserve the exit status, restore the old status. Otherwise set the
// status of the subcommand.
if (apply_exit_status) {
parser.set_last_statuses(subcommand_statuses);
// Hack: If the evaluation failed, avoid returning -1 to the user.
if (subcommand_statuses.status == -1) {
parser.set_last_statuses(statuses_t::just(255));
} else {
parser.set_last_statuses(subcommand_statuses);
}
} else {
parser.set_last_statuses(std::move(prev_statuses));
}

View file

@ -1,2 +1,8 @@
#RUN: %fish -c "echo 1.2.3.4."
#RUN: %fish -C 'set -l fish %fish' %s
$fish -c "echo 1.2.3.4."
# CHECK: 1.2.3.4.
PATH= $fish -c "echo (command a)" 2>/dev/null
echo $status
# CHECK: 255