2010-08-20 5 views
2

Я создаю скрипт clj для запуска clojure следующим образом.Параметр, передаваемый с bash для clojure

java -cp $CLOJURE_JAR:$CLASSPATH clojure.main $1 

Проблема в том, что $ 1 - это имя скрипта, поэтому я не могу передать аргумент с этим.

альтернативы могут быть

java -cp $CLOJURE_JAR:$CLASSPATH clojure.main $1 $2 $3 $4 $5 

надеясь, что число аргументов меньше, чем четыре, которые могли бы работать, но я думаю, там должно быть лучшим решением для этого.

Что было бы лучше, чем это?

+0

смотреть на Clojure-вно/ПУ/Баш/CLJ-окр-каталог: http://github.com/clojure/clojure-contrib/blob/master/launchers/bash/clj-env-dir – edbond

ответ

4

Вы можете использовать [email protected] передать все аргументы CLI, полученных скриптом:

#!/bin/sh 
java -cp $CLOJURE_JAR:$CLASSPATH clojure.main [email protected] 

Если вы хотите, чтобы пропустить некоторые первоначальные аргументы, вы можете использовать, например, shift, которая падает текущее значение $1 и сдвигает остальные аргументы, так что $1 принимает старое значение $2, $2 что из $3 и т.д .:

#!/bin/sh 
# prints out the first CLI argument, then passes the rest on to clojure.main 
echo $1 
shift 
java -cp $CLOJURE_JAR:$CLASSPATH clojure.main [email protected] 

Для соответствующей информации, см раздел, озаглавленный Special Parameters в bash ' s manpage.

+1

'shift' также может принимать аргумент, если вам нужно сбросить более одного раза:' shift 2', например. –

Смежные вопросы