通过shebang在nix中设置环境变量

问题描述 投票:1回答:1

是否可以在使用通过shebang调用的nix-shell时设置环境变量?例如,我正在使用

#! /usr/bin/env nix-shell
#! nix-shell -i runghc --pure

并且想要设置一个环境变量,例如FOO=bar。注意,FOO不一定由周围环境定义。因此--keep FOO不是一个选项。

nix
1个回答
0
投票

似乎您正在使用随附的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)

© www.soinside.com 2019 - 2024. All rights reserved.