Fork me on GitHub

What's the most elegant way to get the equivalent of something like ls *.log , with a result that is a sequence of the file name strings, in my babashka script? I tried using sh but couldn't make it work with the *. I resorted to the following which works but it seems like there must be a much better way:

(filter #(= ".log" (apply str (take-last 4 %)))
        (map #(.getName %) (.listFiles (File. "."))))


Nice. So it seems the equivalent of the code I posted above, if I've done (require '[babashka.fs :as fs]), is:

(map fs/file-name (fs/glob "." "*.log"))


Yes or list-dir

👍 2
Adam Helins12:07:40

I am preparing a monorepo where each subproject has its own bb.edn file. However, there are sets of useful tasks that I'd like to reuse in some of them. What would you recommend for avoiding any copy/pasting?


that's what I would recommend as well

Adam Helins13:07:08

Indeed, that's what I have been doing but it still implies copying the tasks themselves, and if you change the :doc you have to do it everywhere, for instance. So it was getting messy.


Perhaps generate the tasks file using Selmer? perhaps a little hacky ;)

Adam Helins13:07:32

All right, using the heavy artillery then 😛

Adam Helins13:07:12

Related to previous but different. For very common tasks that end up pretty much in all subprojects (eg. test), I am trying to define them in my root bb.edn and specify a :dir when calling (clojure ...) (where a subproject lives and has its deps.ednfile). However I am having an issue with a dep that points to a :local/root:

Error building classpath. Manifest type not detected when finding deps ...
In spite of the path to that jar being correct. Doesn't happen when executing directly from the subproject dir


Does it happen when you use (shell {:dir ...} "clojure ...") instead? if not, then it might be a bug somewhere in bb

Adam Helins13:07:58

It seems to work using shell, yes

Adam Helins13:07:20

Yep, all is perfect from what I see


hmmm, can you make a repro for me? I can look into fixing it

Adam Helins13:07:18

Sure if I manage to reproduce it 🙂


Is you can still reproduce it locally, it might also be a caching issue (in .cpcache)


This happens because the clojure task is a 2 step process: 1) deps resolved using tools.deps.alpha, 2) the actual clojure JVM process. But the options currently only apply against the second step where the process is launched.


ok, I think I fixed it on master. Could you try out a binary from master? Available in #babashka-circleci-builds in a few minutes


I'll add a test for it later


For me at least it works locally now:

borkdude@MBP2019 /tmp $ bb -e '@(babashka.deps/clojure ["-Sforce" "-M" "-r"] {:dir "proj1"})'
Clojure 1.10.1
user=> (require 'medley.core)

Adam Helins18:07:28

@U04V15CAJ Excellent, I'll give it a go tomorrow, thanks

Adam Helins09:07:11

Seems to work fine now, REPL starts and classpath is properly computed 🙂


Haven't mentioned it here yet, but yesterday I made a CLI that exposes specter so you can use its DSL to filter/transform some EDN from stdin:

😻 2

is there a way to get the path to the currently in use babashka interpreter? something like $0? so that i could call the same bb to run a child script without needing it to be in $PATH ?


actually yes, let me look it up


i looked in docs and checked (System/properties) but haven't found anything yet


am currently trying to discover vars in the repl 🙂



$ bb -e '(-> (java.lang.ProcessHandle/current) .info .command .get)'

❤️ 2

Perhaps good to document somewhere


@deleted-user You could, but jet also already has a query language and the --func option for normal Clojure functions


Same here, that's why I just use jet with either --query or --func. I don't know yet about adding specter to jet, I actually am not that experienced with it, but someone in the #sci wanted it to use together with sci, so I made it work for that reason


it seems like a good candidate


cool. sometimes I also just use bb for json. some people have aliases for that (


I think @nate also shared one back in the early days where you could provide an expression, it's not so hard to figure out


what you can also do instead of aliases is make an executable bb script and dump that in a bin folder