summary refs log tree commit diff
path: root/pkgs/stdenv
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2014-11-10 13:35:09 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2014-11-10 13:35:09 +0100
commit78b01de68d6ecb65ed3b3220e96d290e116436aa (patch)
tree5cf6676fc1f03ce84fa5a6b5acc5da9538ba74ef /pkgs/stdenv
parent103f5658a49e35dbac2fcec4a58937b9045836cb (diff)
downloadnixpkgs-78b01de68d6ecb65ed3b3220e96d290e116436aa.tar
nixpkgs-78b01de68d6ecb65ed3b3220e96d290e116436aa.tar.gz
nixpkgs-78b01de68d6ecb65ed3b3220e96d290e116436aa.tar.bz2
nixpkgs-78b01de68d6ecb65ed3b3220e96d290e116436aa.tar.lz
nixpkgs-78b01de68d6ecb65ed3b3220e96d290e116436aa.tar.xz
nixpkgs-78b01de68d6ecb65ed3b3220e96d290e116436aa.tar.zst
nixpkgs-78b01de68d6ecb65ed3b3220e96d290e116436aa.zip
substituteAll: Enumerate environment variables more reliably
Getting the names of all environment variables is tricky. The previous
implementation easily got confused by multi-line variables. The new
one is more reliable but not still not perfect.

This works around a segfault in Bash 4.3, where the expression
"${!var}" (where var="-9") crashes under certain conditions.

http://hydra.nixos.org/build/16693445
Diffstat (limited to 'pkgs/stdenv')
-rw-r--r--pkgs/stdenv/generic/setup.sh2
1 files changed, 1 insertions, 1 deletions
diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh
index fe801c6bb97..987d7766ce8 100644
--- a/pkgs/stdenv/generic/setup.sh
+++ b/pkgs/stdenv/generic/setup.sh
@@ -386,7 +386,7 @@ substituteAll() {
     local output="$2"
 
     # Select all environment variables that start with a lowercase character.
-    for envVar in $(env | sed "s/^[^a-z].*//" | sed "s/^\([^=]*\)=.*/\1/"); do
+    for envVar in $(env | sed -e $'s/^\([a-z][^=]*\)=.*/\\1/; t \n d'); do
         if [ "$NIX_DEBUG" = "1" ]; then
             echo "$envVar -> ${!envVar}"
         fi