Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Haskell中使用环境变量解析Shell命令_Shell_Haskell - Fatal编程技术网

在Haskell中使用环境变量解析Shell命令

在Haskell中使用环境变量解析Shell命令,shell,haskell,Shell,Haskell,Haskell的System.Process为我们提供了一种通过shell将字符串转换为shell命令的方法: System.Process.createProcess(System.Process.shell$“带有一些参数的_命令”) 问题是shell不解析环境变量。是否有库命令将shell字符串转换为对环境变量敏感的shell调用?差不多 System.Process.createProcess(shellWithEnv“ENVIRONMENT_VARIABLE=带有一些参数的值a_命令

Haskell的
System.Process
为我们提供了一种通过
shell
字符串
转换为shell命令的方法:

System.Process.createProcess(System.Process.shell$“带有一些参数的_命令”)
问题是
shell
不解析环境变量。是否有库命令将shell字符串转换为对环境变量敏感的shell调用?差不多

System.Process.createProcess(shellWithEnv“ENVIRONMENT_VARIABLE=带有一些参数的值a_命令”)
?

编辑:更多证据
shell
无法获取此信息:

GHCI> shell "ENV=value echo hi"
CreateProcess {cmdspec = ShellCommand "ENV=value echo hi", cwd = Nothing, env = Nothing, std_in = Inherit, std_out = Inherit, std_err = Inherit, close_fds = False, create_group = False, delegate_ctlc = False, detach_console = False, create_new_console = False, new_session = False, child_group = Nothing, child_user = Nothing, use_process_jobs = False}
这里的
env=Nothing

只是一个构造
CreateProcess
对象的函数。您可以使用以下命令更新记录的
env
属性:

import System.Process(CreateProcess(env), createProcess, shell)

createProcess ((\x -> x {env=Just [("ENVIRONMENT_VARIABLE", "value")]}) (shell "a_command with some arguments"))
导入系统进程(CreateProcess(env)、CreateProcess、shell)
createProcess((\x->x{env=Just[(“环境变量”,“值”)]})(shell“带有一些参数的命令”)无法复制
createProcess(shell“A=B env | grep^A=”)
prints
A=B
。您到底想在这里实现什么?如@DanielWagner所示,命令开头的VAR=VALUE语法将导致shell在运行命令之前使用该值设置环境变量。这对于很多事情来说已经足够好了,因为命令本身需要设置env var。或者在shell启动之前设置变量很重要(例如,它的值是否会影响shell的启动脚本)?在这种情况下,你需要威廉·范·登·昂森(Willem Van Den Onsen)的答案。为什么
env=Nothing
是个问题?结果(让我惊讶,不是所有人)你都是对的:
shell
导入环境变量(尽管没有更新
env
)。
env
是不必要的;可以从字符串中导入环境变量,如本文所述。