diff --git a/src/ast.c b/src/ast.c index 71bc8ed..bd69382 100644 --- a/src/ast.c +++ b/src/ast.c @@ -21,7 +21,7 @@ ast_t *parse_arg(ast_ctx_t *ctx, ast_t *node) if (ctx->act_tok.type == T_SEMICOLON) return node; if (ctx->act_tok.type & (T_ARG | T_REDIRECT | T_APPEND | - T_IN_REDIRECT | T_HEREDOC)) { + T_IN_REDIRECT | T_HEREDOC | T_VAR)) { if (!ensure_node_cap(node)) return NULL; node->vector.tokens[node->vector.sz] = ctx->act_tok; diff --git a/src/exec.c b/src/exec.c index 65f042f..bb03bb9 100644 --- a/src/exec.c +++ b/src/exec.c @@ -69,8 +69,7 @@ char **parse_args(ef_t *ef, ast_t *node, env_t *env) if (ef->skip_sz > 0 && i >= ef->skip_i && i < ef->skip_i + ef->skip_sz) continue; ensure_args_capacity(&args, sz, &cap); - node->vector.tokens[i].str[node->vector.tokens[i].sz] = '\0'; - args[sz] = node->vector.tokens[i].str; + args[sz] = handle_var_case(node, env, &i); U_DEBUG("Args [%lu] [%s]\n", sz, args[sz]); sz++; } diff --git a/src/exec.h b/src/exec.h index 4bb4a2c..61effd7 100644 --- a/src/exec.h +++ b/src/exec.h @@ -48,4 +48,5 @@ typedef struct { __attribute__((nonnull)) int execute(ef_t *ef); +char *handle_var_case(ast_t *node, env_t *env, size_t *i); #endif /* EXEC_H */ diff --git a/src/handle_vars.c b/src/handle_vars.c new file mode 100644 index 0000000..9707918 --- /dev/null +++ b/src/handle_vars.c @@ -0,0 +1,20 @@ +/* +** EPITECH PROJECT, 2025 +** 42sh +** File description: +** handle_vars +*/ + +#include "ast.h" +#include "env.h" + +char *handle_var_case(ast_t *node, env_t *env, size_t *i) +{ + if (node->vector.tokens[*i].type == T_VAR && *i + 1 < node->vector.sz) { + *i += 1; + node->vector.tokens[*i].str[node->vector.tokens[*i].sz] = '\0'; + return get_env_value(env, node->vector.tokens[*i].str); + } + node->vector.tokens[*i].str[node->vector.tokens[*i].sz] = '\0'; + return node->vector.tokens[*i].str; +}