diff options
| -rw-r--r-- | smash/env.c | 15 | ||||
| -rw-r--r-- | smash/main.c | 2 |
2 files changed, 11 insertions, 6 deletions
diff --git a/smash/env.c b/smash/env.c index 58285f0..69e5e68 100644 --- a/smash/env.c +++ b/smash/env.c @@ -31,14 +31,16 @@ char* new_line_and_replace_vars(const char *line, u64 n) char *replaced; for (int i = 0; i < n && line[i]; ++i) { - if (line[i] == '$') { + if (line[i] == '$' && line[i + 1] == '[') { clear_buf(var, 64); - ++i; - for (int j = 0; line[i] && line[i] != ' ';) { + i += 2; + + for (int j = 0; line[i] && line[i] != ']';) { var[j] = line[i]; ++j; ++i; } + ++i; if (cstr_length(var) == 0) { size++; @@ -56,15 +58,16 @@ char* new_line_and_replace_vars(const char *line, u64 n) for (int i = 0; i < size && line[line_pos]; ++i) { - if (line[line_pos] == '$') { + if (line[line_pos] == '$' && line[line_pos + 1] == '[') { clear_buf(var, 64); - ++line_pos; + line_pos += 2; - for (int j = 0; line[line_pos] && line[line_pos] != ' ';) { + for (int j = 0; line[line_pos] && line[line_pos] != ']';) { var[j] = line[line_pos]; ++j; ++line_pos; } + ++line_pos; if (cstr_length(var)) { const char *e = getenv(var); diff --git a/smash/main.c b/smash/main.c index 645f4eb..fe393e1 100644 --- a/smash/main.c +++ b/smash/main.c @@ -88,6 +88,8 @@ int main(int argc, char *argv[]) line = new_line_and_replace_vars(linebuf, BUFSIZ); line_length = cstr_length(line); + wff(STDERR_FD, "execute: %s\n", line); + if (line_length > 0) { exec(line); } |