summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorMaximilian Bosch <maximilian@mbosch.me>2018-10-10 13:19:52 +0200
committerMaximilian Bosch <maximilian@mbosch.me>2018-10-10 13:19:52 +0200
commit76cc15a3640940aa5866a3fc573e8089f6b336c9 (patch)
treea8d9b63dc95f48709f32949ed0792b2c3746efa7 /nixos
parentfc847785d89255fb34c32fb28212a66044f655f3 (diff)
downloadnixpkgs-76cc15a3640940aa5866a3fc573e8089f6b336c9.tar
nixpkgs-76cc15a3640940aa5866a3fc573e8089f6b336c9.tar.gz
nixpkgs-76cc15a3640940aa5866a3fc573e8089f6b336c9.tar.bz2
nixpkgs-76cc15a3640940aa5866a3fc573e8089f6b336c9.tar.lz
nixpkgs-76cc15a3640940aa5866a3fc573e8089f6b336c9.tar.xz
nixpkgs-76cc15a3640940aa5866a3fc573e8089f6b336c9.tar.zst
nixpkgs-76cc15a3640940aa5866a3fc573e8089f6b336c9.zip
nixos-option: don't abort with shell failures if options are not existant
`nixos-option` basically handles two cases: the given option is either a
valid option defined using `mkOption` or an attribute set which contains
a set of options.

If none of the above cases is valid, `$1` is invalid. Unfortunatley the
script interpreted invalid options as an attribute set which rendered
shell failures when trying to evaluate the arguments.

First of all, `if names=$(attrNames ...)` resulted in `<PRIMOP>` as
`attrNames` simply evaluated `builtins.attrNames $result` which results
in a non-applied function with `$result` being empty. Trying to map over
this string using `nixMap` while applying `escapeQuotes` causes the bash
error as `eval echo "<PRIMOP>"` is invalid syntax.

Explicitly checking if `$result' contains a value (do we have an
attribute set?) and otherwise returning a warning and asking if $option
exists fixes the problem.

Fixes #48060
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/installer/tools/nixos-option.sh6
1 files changed, 3 insertions, 3 deletions
diff --git a/nixos/modules/installer/tools/nixos-option.sh b/nixos/modules/installer/tools/nixos-option.sh
index 327e3e6989f..76db778da27 100644
--- a/nixos/modules/installer/tools/nixos-option.sh
+++ b/nixos/modules/installer/tools/nixos-option.sh
@@ -314,13 +314,13 @@ else
   # echo 1>&2 "Warning: This value is not an option."
 
   result=$(evalCfg "")
-  if names=$(attrNames "$result" 2> /dev/null); then
+  if [ ! -z "$result" ]; then
+    names=$(attrNames "$result" 2> /dev/null)
     echo 1>&2 "This attribute set contains:"
     escapeQuotes () { eval echo "$1"; }
     nixMap escapeQuotes "$names"
   else
-    echo 1>&2 "An error occurred while looking for attribute names."
-    echo $result
+    echo 1>&2 "An error occurred while looking for attribute names. Are you sure that \`$option' exists?"
   fi
 fi