Advice on Shell Scripting with new "clojure" binary

152 views
Skip to first unread message

Delon Newman

unread,
Jan 4, 2018, 6:26:43 PM1/4/18
to Clojure
How do I get command line arguments in a Clojure shell script using the new "clojure" binary?

So for a file like:


# file-name: hello
#!/usr/bin/env clojure

(defn -main [name]
   (println (str "Hello, " name)))

and execute it like:

./hello John

the "-main" function is not executed. Is there another method?

Also, any additional advice with respect to using Clojure for shell scripting would be appreciated.

Thanks!

Sean Corfield

unread,
Jan 4, 2018, 9:15:07 PM1/4/18
to clo...@googlegroups.com

The `clojure` command just loads your script – it doesn’t call -main – if you had

 

      ;; test.clj

      (println “Loaded!”)

 

And you ran `clojure test.clj` then it would print Loaded!

 

So you could do:

 

      #!/usr/bin/env clojure

      (println (str “Hello, “ (first *command-line-args*)))

 

(the clojure.main/main function binds the command line arguments to that var)

 

This works on OS X – I haven’t tried it on Linux.

 

Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

 


From: clo...@googlegroups.com <clo...@googlegroups.com> on behalf of Delon Newman <ikt...@gmail.com>
Sent: Thursday, January 4, 2018 3:26:43 PM
To: Clojure
Subject: Advice on Shell Scripting with new "clojure" binary
 
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
clojure+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Delon Newman

unread,
Jan 4, 2018, 9:43:09 PM1/4/18
to Clojure
Thank you that's what I was looking for!

Gary Verhaegen

unread,
Jan 5, 2018, 3:33:16 AM1/5/18
to clo...@googlegroups.com
On 4 January 2018 at 23:26, Delon Newman <ikt...@gmail.com> wrote:
> Also, any additional advice with respect to using Clojure for shell
> scripting would be appreciated.

Unless you have a specific reason to prefer the JVM to Node as a
platform for your script, I'd encourage you to take a look at Planck
and Lumo for shell scripting. Being based on Node allows them to start
up much faster, which may or may not be important to your use-case.

http://planck-repl.org
https://github.com/anmonteiro/lumo

Delon Newman

unread,
Jan 5, 2018, 9:13:03 AM1/5/18
to clo...@googlegroups.com
Thanks, but I do need the JVM.
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clo...@googlegroups.com
> Note that posts from new members are moderated - please be patient with your first post.
> To unsubscribe from this group, send email to
> clojure+u...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to a topic in the Google Groups "Clojure" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/A3ied9_joLA/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to clojure+u...@googlegroups.com.

Alan Thompson

unread,
Jan 5, 2018, 9:27:40 AM1/5/18
to clo...@googlegroups.com
Cool!  I had somehow missed that in the announcement.  Quick test on linux:

 > echo '(println "Yes!!!")' | time clojure
Clojure 1.9.0
user=> Yes!!!
nil
user=> 
clojure  1.38s user   0.07s system   198% cpu   0.730 total

Well under a second, even with a full-power JVM to load.  Very convenient!

Alan


For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscribe@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to

For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages