Shell: rewrite the whole shell to use tokens instead of raw strings

tab completion is still running with raw strings and that has to be
fixed in the future.
This commit is contained in:
2024-10-13 21:56:59 +03:00
parent dab6e5a60f
commit 8adc97980a
18 changed files with 2721 additions and 1732 deletions

View File

@@ -0,0 +1,53 @@
#pragma once
#include "Builtin.h"
#include "CommandTypes.h"
#include <BAN/NoCopyMove.h>
class Execute
{
BAN_NON_COPYABLE(Execute);
BAN_NON_MOVABLE(Execute);
public:
Execute() = default;
BAN::ErrorOr<int> execute_command_sync(BAN::Span<const BAN::String> arguments, int fd_in, int fd_out);
BAN::ErrorOr<void> execute_command(const SingleCommand&, int fd_in, int fd_out, bool background, pid_t pgrp = 0);
BAN::ErrorOr<void> execute_command(const PipedCommand&);
BAN::ErrorOr<void> execute_command(const CommandTree&);
BAN::ErrorOr<void> source_script(BAN::StringView path);
int last_background_pid() const { return m_last_background_pid; }
int last_return_value() const { return m_last_return_value; }
private:
struct InternalCommand
{
enum class Type
{
Builtin,
External,
};
BAN::Variant<Builtin::BuiltinCommand, BAN::String> command;
BAN::Span<const BAN::String> arguments;
int fd_in;
int fd_out;
bool background;
pid_t pgrp;
};
struct ExecuteResult
{
pid_t pid;
int exit_code;
};
BAN::ErrorOr<ExecuteResult> execute_command_no_wait(const InternalCommand& command);
private:
int m_last_background_pid { 0 };
int m_last_return_value { 0 };
};