如何通过堆栈将环境变量传递给 Haskell 程序 运行?
How to pass environment variables into Haskell programs run via stack?
我刚刚注意到 Haskell 程序 运行 通过 stack
不接收来自调用环境的环境变量。这是一个示例程序:
-- testenv.hs
import System.Environment
main :: IO ()
main = print =<< getEnv "FOOBAR"
如果我 运行 它没有堆栈,就像这样,它有效:
% FOOBAR=123 runhaskell testenv.hs
"123"
但是使用堆栈:
% FOOBAR=123 stack runhaskell testenv.hs
testenv.hs: FOOBAR: getEnv: does not exist (no environment variable)
编译时也是如此:FOOBAR=123 stack exec testenv
失败,而 FOOBAR=123 .stack-work/install/BLAHBLAH/testenv
有效。
有没有办法强制堆栈传递某些环境变量?
我遇到的真正问题是 yesod devel
,有些设置我想用环境变量覆盖,但是 yesod devel
使用堆栈 运行 程序,所以它们不要通过。
这是 NixOS 18.03.132262.0a73111bc29 上的堆栈 1.6.5。
这似乎是我错过的 relevant section of the stack manual:
“By default, stack will run the build in a pure Nix build environment
(or shell), which means two important things: (1) basically no
environment variable will be forwarded from your user session to the
nix-shell [...]”
所以这个建议奏效了:
“To override this behaviour, add pure: false to your stack.yaml or
pass the --no-nix-pure option to the command line.”
% FOOBAR=123 stack --no-nix-pure runhaskell testenv.hs
"123"
我刚刚注意到 Haskell 程序 运行 通过 stack
不接收来自调用环境的环境变量。这是一个示例程序:
-- testenv.hs
import System.Environment
main :: IO ()
main = print =<< getEnv "FOOBAR"
如果我 运行 它没有堆栈,就像这样,它有效:
% FOOBAR=123 runhaskell testenv.hs
"123"
但是使用堆栈:
% FOOBAR=123 stack runhaskell testenv.hs
testenv.hs: FOOBAR: getEnv: does not exist (no environment variable)
编译时也是如此:FOOBAR=123 stack exec testenv
失败,而 FOOBAR=123 .stack-work/install/BLAHBLAH/testenv
有效。
有没有办法强制堆栈传递某些环境变量?
我遇到的真正问题是 yesod devel
,有些设置我想用环境变量覆盖,但是 yesod devel
使用堆栈 运行 程序,所以它们不要通过。
这是 NixOS 18.03.132262.0a73111bc29 上的堆栈 1.6.5。
这似乎是我错过的 relevant section of the stack manual:
“By default, stack will run the build in a pure Nix build environment (or shell), which means two important things: (1) basically no environment variable will be forwarded from your user session to the nix-shell [...]”
所以这个建议奏效了:
“To override this behaviour, add pure: false to your stack.yaml or pass the --no-nix-pure option to the command line.”
% FOOBAR=123 stack --no-nix-pure runhaskell testenv.hs
"123"