forked from lix-project/lix
nix: develop: always force SHELL to chosen shell
SHELL was inherited from the system environment. This resulted in a new shell being started, but with SHELL still referring to the system shell and not the one used by nix-develop. Applications like make, use SHELL to run commands, which meant that top-level commands are run inside the nix-develop-shell, but sub-commands are ran inside the system shell. This setenv forces SHELL to always be set to the shell used by nix-develop.
This commit is contained in:
parent
e34c424279
commit
8c54a01df5
|
@ -293,7 +293,6 @@ struct Common : InstallableCommand, MixProfile
|
||||||
"NIX_LOG_FD",
|
"NIX_LOG_FD",
|
||||||
"NIX_REMOTE",
|
"NIX_REMOTE",
|
||||||
"PPID",
|
"PPID",
|
||||||
"SHELL",
|
|
||||||
"SHELLOPTS",
|
"SHELLOPTS",
|
||||||
"SSL_CERT_FILE", // FIXME: only want to ignore /no-cert-file.crt
|
"SSL_CERT_FILE", // FIXME: only want to ignore /no-cert-file.crt
|
||||||
"TEMP",
|
"TEMP",
|
||||||
|
@ -643,6 +642,10 @@ struct CmdDevelop : Common, MixEnvironment
|
||||||
ignoreException();
|
ignoreException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Override SHELL with the one chosen for this environment.
|
||||||
|
// This is to make sure the system shell doesn't leak into the build environment.
|
||||||
|
setenv("SHELL", shell.data(), 1);
|
||||||
|
|
||||||
// If running a phase or single command, don't want an interactive shell running after
|
// If running a phase or single command, don't want an interactive shell running after
|
||||||
// Ctrl-C, so don't pass --rcfile
|
// Ctrl-C, so don't pass --rcfile
|
||||||
auto args = phase || !command.empty() ? Strings{std::string(baseNameOf(shell)), rcFilePath}
|
auto args = phase || !command.empty() ? Strings{std::string(baseNameOf(shell)), rcFilePath}
|
||||||
|
|
Loading…
Reference in a new issue