1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-27 08:31:16 +02:00

nix-shell: Fix $PATH handling in the impure case

We were passing "p=$PATH" rather than "p=$PATH;", resulting in some
invalid shell code.

Also, construct a separate environment for the child rather than
overwriting the parent's.
This commit is contained in:
Eelco Dolstra 2016-09-20 15:39:08 +02:00
parent 9fc4cb2ae9
commit 4de0639105
3 changed files with 55 additions and 29 deletions

View file

@ -59,6 +59,21 @@ string getEnv(const string & key, const string & def)
}
std::map<std::string, std::string> getEnv()
{
std::map<std::string, std::string> env;
for (size_t i = 0; environ[i]; ++i) {
auto s = environ[i];
auto eq = strchr(s, '=');
if (!eq)
// invalid env, just keep going
continue;
env.emplace(std::string(s, eq), std::string(eq + 1));
}
return env;
}
Path absPath(Path path, Path dir)
{
if (path[0] != '/') {