mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-04 15:19:42 +00:00
Shell: Parse and correctly evaluate 'command &' and 'command &&'
This commit adds the InBackground and ShortCircuitOnFailure attributes to commands, which respectively cause the command to be run in the background, and abort the command chain with exit status != 0.
This commit is contained in:
parent
143be7234f
commit
c23c354779
Notes:
sideshowbarker
2024-07-19 06:09:54 +09:00
Author: https://github.com/alimpfard
Commit: c23c354779
Pull-request: https://github.com/SerenityOS/serenity/pull/2361
Reviewed-by: https://github.com/awesomekling
Reviewed-by: https://github.com/bugaevc
3 changed files with 70 additions and 5 deletions
|
@ -49,11 +49,11 @@ void Parser::commit_subcommand()
|
|||
m_subcommands.append({ move(m_tokens), move(m_redirections), {} });
|
||||
}
|
||||
|
||||
void Parser::commit_command()
|
||||
void Parser::commit_command(Attributes attributes)
|
||||
{
|
||||
if (m_subcommands.is_empty())
|
||||
return;
|
||||
m_commands.append({ move(m_subcommands) });
|
||||
m_commands.append({ move(m_subcommands), attributes });
|
||||
}
|
||||
|
||||
void Parser::do_pipe()
|
||||
|
@ -109,6 +109,31 @@ Vector<Command> Parser::parse()
|
|||
commit_command();
|
||||
break;
|
||||
}
|
||||
if (ch == '&') {
|
||||
commit_token(Token::Special);
|
||||
|
||||
if (i + 1 >= m_input.length()) {
|
||||
in_background:;
|
||||
// Nothing interesting past this token, commit with InBackground
|
||||
commit_subcommand();
|
||||
commit_command(Attributes::InBackground);
|
||||
break;
|
||||
}
|
||||
|
||||
ch = m_input.characters()[++i];
|
||||
++m_position;
|
||||
|
||||
if (ch == '&') {
|
||||
// This is '&&', commit with ShortCircuit
|
||||
commit_subcommand();
|
||||
commit_command(Attributes::ShortCircuitOnFailure);
|
||||
break;
|
||||
}
|
||||
|
||||
--i;
|
||||
--m_position;
|
||||
goto in_background;
|
||||
}
|
||||
if (ch == '|') {
|
||||
commit_token(Token::Special);
|
||||
if (m_tokens.is_empty()) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue