Shell: $? returns last return value
This commit is contained in:
parent
b30f4cbfb5
commit
0fa5401800
|
@ -19,6 +19,7 @@ struct termios old_termios, new_termios;
|
|||
extern char** environ;
|
||||
|
||||
static const char* argv0 = nullptr;
|
||||
static int last_return = 0;
|
||||
|
||||
BAN::Vector<BAN::String> parse_command(BAN::StringView);
|
||||
|
||||
|
@ -29,6 +30,11 @@ BAN::Optional<BAN::String> parse_dollar(BAN::StringView command, size_t& i)
|
|||
if (++i >= command.size())
|
||||
return "$"sv;
|
||||
|
||||
if (command[i] == '?')
|
||||
{
|
||||
i++;
|
||||
return BAN::String::formatted("{}", last_return);
|
||||
}
|
||||
if (isalnum(command[i]))
|
||||
{
|
||||
size_t len = 1;
|
||||
|
@ -643,7 +649,7 @@ int main(int argc, char** argv)
|
|||
{
|
||||
tcsetattr(0, TCSANOW, &old_termios);
|
||||
auto parsed_arguments = parse_command(buffers[index]);
|
||||
execute_command(parsed_arguments);
|
||||
last_return = execute_command(parsed_arguments);
|
||||
tcsetattr(0, TCSANOW, &new_termios);
|
||||
MUST(history.push_back(buffers[index]));
|
||||
buffers = history;
|
||||
|
|
Loading…
Reference in New Issue