首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导出Clojure / Babashka中的环境变量

导出Clojure / Babashka中的环境变量
EN

Stack Overflow用户
提问于 2022-10-23 20:28:06
回答 2查看 93关注 0票数 0

我试图在babaska中为我的另一个babaska脚本编写一个安装脚本(为了一些有趣的同质性)。

导出似乎不起作用,使用:

代码语言:javascript
复制
(shell "export NAME=" value)

是否有一种规范的方法来设置Clojure / Babashka中的环境变量?

EN

回答 2

Stack Overflow用户

发布于 2022-10-23 20:45:37

export是shell内建的;您不能在外壳之外调用它。因此,您想要做的是使用另一个环境运行您的命令。这可以在选项中完成。例如。

代码语言:javascript
复制
(-> (shell/sh "sh" "-c" "echo $X" :env {"X" "Hello"}) :out)

编辑:环境的全局状态

至少在JVM上,改变环境没有简单的方法。。因此,您最好编写自己的函数来执行调用,并与您自己的全局环境合并。

这个例子使用一个原子来保持周围的环境:

代码语言:javascript
复制
(def sh-env (atom {}))

(defn export!
  [m]
  (swap! sh-env merge m))

(defn sh
  ([cmd]
   (sh cmd {}))
  ([cmd env]
   (apply shell/sh (concat cmd [:env (merge @sh-env env)]))))

;;;

(def echo ["sh" "-c" "echo $X"])

(prn (sh echo))

(export! {"X" "Hello"})

(prn (sh echo))

(prn (sh echo {"X" "Goodbye"}))

(export! {"X" "Goodbye"})

(prn (sh echo))

; {:exit 0, :out "\n", :err ""}
; {:exit 0, :out "Hello\n", :err ""}
; {:exit 0, :out "Goodbye\n", :err ""}
; {:exit 0, :out "Goodbye\n", :err ""}
票数 1
EN

Stack Overflow用户

发布于 2022-10-27 21:16:47

使用shell设置环境变量的方法如下:

代码语言:javascript
复制
(shell {:extra-env {"NAME" "FOOBAR"}} command)

见docs 这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74174540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档