From d4a8e2930e1c276715c133bda05fbee45bd2c8a6 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 26 Apr 2019 03:23:27 +0200 Subject: [PATCH] sh: Add a simple "export" command for setting environment variables. --- Userland/sh.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Userland/sh.cpp b/Userland/sh.cpp index 6813e97b839..9f41ee206c2 100644 --- a/Userland/sh.cpp +++ b/Userland/sh.cpp @@ -65,6 +65,22 @@ static int sh_exit(int, char**) return 0; } +static int sh_export(int argc, char** argv) +{ + if (argc == 1) { + for (int i = 0; environ[i]; ++i) + puts(environ[i]); + return 0; + } + auto parts = String(argv[1]).split('='); + if (parts.size() != 2) { + fprintf(stderr, "usage: export variable=value\n"); + return 1; + } + putenv(const_cast(String::format("%s=%s", parts[0].characters(), parts[1].characters()).characters())); + return 0; +} + static int sh_cd(int argc, char** argv) { char pathbuf[PATH_MAX]; @@ -120,6 +136,10 @@ static bool handle_builtin(int argc, char** argv, int& retval) retval = sh_exit(argc, argv); return true; } + if (!strcmp(argv[0], "export")) { + retval = sh_export(argc, argv); + return true; + } return false; }