diff --git a/src/babashka/impl/clojure/core.clj b/src/babashka/impl/clojure/core.clj index 0ef0c81b..a0f3e946 100644 --- a/src/babashka/impl/clojure/core.clj +++ b/src/babashka/impl/clojure/core.clj @@ -20,6 +20,8 @@ ret#)) (def data-readers (sci/new-dynamic-var '*data-readers* nil)) +(def command-line-args (sci/new-dynamic-var '*command-line-args* nil)) +(def warn-on-reflection (sci/new-dynamic-var '*warn-on-reflection* false)) (defn read+string "Added for compatibility. Must be used with @@ -59,4 +61,6 @@ 'default-data-readers default-data-readers 'xml-seq (copy-core-var xml-seq) 'read+string (fn [& args] - (apply read+string @common/ctx args))}) + (apply read+string @common/ctx args)) + '*command-line-args* command-line-args + '*warn-on-reflection* warn-on-reflection}) diff --git a/src/babashka/main.clj b/src/babashka/main.clj index 28e7263b..268990c9 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -181,8 +181,6 @@ Use -- to separate script command line args from bb command line args. (str/replace x #"^#!.*" "")) (throw (Exception. (str "File does not exist: " file)))))) -(def reflection-var (sci/new-dynamic-var '*warn-on-reflection* false)) - (defn load-file* [f] (let [f (io/file f) s (slurp f)] @@ -199,7 +197,7 @@ Use -- to separate script command line args from bb command line args. nrepl-opts (assoc nrepl-opts :debug dev? :describe {"versions" {"babashka" version}} - :thread-bind [reflection-var])] + :thread-bind [core/warn-on-reflection])] (nrepl-server/start-server! ctx nrepl-opts) (binding [*out* *err*] (println "For more info visit: https://book.babashka.org/#_nrepl"))) @@ -539,7 +537,7 @@ Use -- to separate script command line args from bb command line args. (defn exec [opts] (binding [*unrestricted* true] - (sci/binding [reflection-var false + (sci/binding [core/warn-on-reflection @core/warn-on-reflection core/data-readers @core/data-readers sci/ns @sci/ns] (let [{version-opt :version @@ -600,15 +598,11 @@ Use -- to separate script command line args from bb command line args. ["META-INF/MANIFEST.MF"] {:url? true})] (cp/main-ns res)) main) - ;; TODO: pull more of these values to compile time opts {:aliases aliases :namespaces (-> namespaces (assoc 'clojure.core (assoc core-extras - '*command-line-args* - (sci/new-dynamic-var '*command-line-args* command-line-args) - '*warn-on-reflection* reflection-var 'load-file load-file*)) (assoc-in ['clojure.java.io 'resource] (fn [path] @@ -693,7 +687,8 @@ Use -- to separate script command line args from bb command line args. [nil 0] ;; done streaming (let [res [(let [res (sci/binding [sci/file (or @sci/file "") - input-var in] + input-var in + core/command-line-args command-line-args] (sci/eval-string* sci-ctx expression))] (when (some? res) (if-let [pr-f (cond shell-out println @@ -742,7 +737,6 @@ Use -- to separate script command line args from bb command line args. (let [opts (parse-opts args)] (if-let [do-opts (:do opts)] (reduce (fn [_ opts] -;; (prn :opts opts) (let [ret (exec opts)] (if (pos? ret) (reduced ret) diff --git a/test-resources/bb-edn/user.clj b/test-resources/bb-edn/user.clj index 126760a1..034e299f 100644 --- a/test-resources/bb-edn/user.clj +++ b/test-resources/bb-edn/user.clj @@ -3,8 +3,8 @@ [clojure.string :as str])) (defn bash [& args] - (prn :args args) - (prn :cmd *command-line-args*) + ;; (prn :args args) + ;; (prn :cmd *command-line-args*) (-> (p/process ["bash" "-c" (str/join " " args)] {:inherit true}) p/check)) diff --git a/test-resources/bb.edn b/test-resources/bb.edn index 180fc15a..2f06023f 100644 --- a/test-resources/bb.edn +++ b/test-resources/bb.edn @@ -9,6 +9,9 @@ *command-line-args*))]} :tree {:task/type :babashka :args [:clojure -Stree]} + :do-bash {:task/type :babashka + :args [:do :bash "ls | wc -l" + :__ :eval-plus 1 2 3]} :all {:task/type :babashka :args [:do :count-files :__ :bash "ls | wc -l"