diff --git a/sh/sh.c b/sh/sh.c index 278333ce..09a397b6 100644 --- a/sh/sh.c +++ b/sh/sh.c @@ -58,6 +58,7 @@ static const char* builtin_commands[] = "exit", "unset", "clearenv", + "history", (const char*) NULL, }; @@ -1341,6 +1342,19 @@ struct execute_result execute(char** tokens, } } + if ( strcmp(argv[0], "history") == 0 ) + { + for ( size_t i = 0; i < edit_state.history_used; i++ ) + { + const char* line = edit_state.history[i]; + if ( fprintf(stdout, "%5zu %s\n", i + 1, line) < 0 ) + err(1, "stdout"); + } + if ( fflush(stdout) == EOF ) + err(1, "stdout"); + exit(0); + } + execvp(argv[0], argv); if ( interactive && errno == ENOENT )