about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/nix/eval.cc14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/nix/eval.cc b/src/nix/eval.cc
index eb2b13a2dcd7..981cefa800c4 100644
--- a/src/nix/eval.cc
+++ b/src/nix/eval.cc
@@ -10,6 +10,13 @@ using namespace nix;
 
 struct CmdEval : MixJSON, InstallablesCommand
 {
+    bool raw = false;
+
+    CmdEval()
+    {
+        mkFlag(0, "raw", "print strings unquoted", &raw);
+    }
+
     std::string name() override
     {
         return "eval";
@@ -22,13 +29,18 @@ struct CmdEval : MixJSON, InstallablesCommand
 
     void run(ref<Store> store) override
     {
+        if (raw && json)
+            throw UsageError("--raw and --json are mutually exclusive");
+
         auto state = getEvalState();
 
         auto jsonOut = json ? std::make_unique<JSONList>(std::cout) : nullptr;
 
         for (auto & i : installables) {
             auto v = i->toValue(*state);
-            if (json) {
+            if (raw) {
+                std::cout << state->forceString(*v);
+            } else if (json) {
                 PathSet context;
                 auto jsonElem = jsonOut->placeholder();
                 printValueAsJSON(*state, true, *v, jsonElem, context);