我试图在babaska中为我的另一个babaska脚本编写一个安装脚本(为了一些有趣的同质性)。
导出似乎不起作用,使用:
(shell "export NAME=" value)是否有一种规范的方法来设置Clojure / Babashka中的环境变量?
发布于 2022-10-23 20:45:37
export是shell内建的;您不能在外壳之外调用它。因此,您想要做的是使用另一个环境运行您的命令。这可以在选项中完成。例如。
(-> (shell/sh "sh" "-c" "echo $X" :env {"X" "Hello"}) :out)编辑:环境的全局状态
至少在JVM上,改变环境没有简单的方法。。因此,您最好编写自己的函数来执行调用,并与您自己的全局环境合并。
这个例子使用一个原子来保持周围的环境:
(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 ""}发布于 2022-10-27 21:16:47
https://stackoverflow.com/questions/74174540
复制相似问题