diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2017-08-29T12·28+0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2017-08-29T12·42+0200 |
commit | 5cc8609e30ab4f76053f3159c51ea78d9215bc8c (patch) | |
tree | 1a8d1d78f82389280f6c59954b8f82bdb2823f43 /src/nix/run.cc | |
parent | 93a5ef0516881ec133fc5e54069add6dd64ffbdd (diff) |
nix run: Allow passing a command to execute
E.g. nix run nixpkgs.hello -c hello --greeting Hallo Note that unlike "nix-shell --command", no quoting of arguments is necessary. "-c" (short for "--command") cannot be combined with "--" because they both consume all remaining arguments. But since installables shouldn't start with a dash, this is unlikely to cause problems.
Diffstat (limited to 'src/nix/run.cc')
-rw-r--r-- | src/nix/run.cc | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/nix/run.cc b/src/nix/run.cc index e58e2f187a2d..39fbcc8acf9f 100644 --- a/src/nix/run.cc +++ b/src/nix/run.cc @@ -17,8 +17,20 @@ std::string chrootHelperName = "__run_in_chroot"; struct CmdRun : InstallablesCommand { + Strings command = { "bash" }; + CmdRun() { + mkFlag() + .longName("command") + .shortName('c') + .description("command and arguments to be executed; defaults to 'bash'") + .arity(ArityAny) + .labels({"command", "args"}) + .handler([&](Strings ss) { + if (ss.empty()) throw UsageError("--command requires at least one argument"); + command = ss; + }); } std::string name() override @@ -43,8 +55,8 @@ struct CmdRun : InstallablesCommand unixPath.push_front(path + "/bin"); setenv("PATH", concatStringsSep(":", unixPath).c_str(), 1); - std::string cmd = "bash"; - Strings args = { cmd }; + std::string cmd = *command.begin(); + Strings args = command; /* If this is a diverted store (i.e. its "logical" location (typically /nix/store) differs from its "physical" location |