是否可以在使用通过shebang调用的nix-shell时设置环境变量?例如,我正在使用
#! /usr/bin/env nix-shell
#! nix-shell -i runghc --pure
并且想要设置一个环境变量,例如FOO=bar
。注意,FOO
不一定由周围环境定义。因此--keep FOO
不是一个选项。
似乎您正在使用随附的shell.nix
文件。您可以在此简单地将环境变量定义为派生属性。
shell.nix
pkgs.mkShell {
buildInputs = [ pkgs.ghc ];
shellHook = ''
VIA_SHELL_HOOK=it\ works # no it doesn't
'';
VIA_DRV_ATTR = "working";
}
示例可执行脚本
#!/usr/bin/env nix-shell
#!nix-shell -i runghc --pure
import System.Environment(getEnv)
main = do
getEnv "VIA_DRV_ATTR" >>= print
getEnv "VIA_SHELL_HOOK" >>= print
输出:
"working"
hello: VIA_SHELL_HOOK: getEnv: does not exist (no environment variable)
(Nix 2.3.4,Nixpkgs 20.03)