mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-01 07:01:54 +00:00
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
This commit is contained in:
parent
fc847785d8
commit
76cc15a364
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user