作業用スクリプトファイルをClojrueで書く
スクリプトファイルとして実行させられることはできたのですが、Clojure自体の立ち上がりが遅いので実用性はあんまりありません...
2024/05/19 追記
jokerというツールを使えば、高速に起動できることが分かったので、別記事でまとめました
はじめに
手元の環境はMacなので、Macベースで記述していきます。
インストール
Clojureの公式サイトから最新版の以下の3ファイルをDLします。
- clojure-1.11.1.jar
- core.specs.alpha-0.2.62.jar
- spec.alpha-0.3.218.jar
この3ファイルをどこでもいいので場所を決めて配置します。
私の環境では以下のように/opt
下にディレクトリを作成して置きました。
sudo mkdir /opt/clojure
sudo chown -R ユーザ名 /opt/clojure
mv clojure-1.11.1.jar /opt/clojure/
mv core.specs.alpha-0.2.62.jar /opt/clojure
mv spec.alpha-0.3.218.jar /opt/clojure
スクリプトファイル作成
Haskellの拡張子は.clj
なので、sample.clj
というファイルを作成する。
#^:shebang '[
CLOJURE_HOME=/opt/clojure
CP1=$CLOJURE_HOME/clojure.jar
CP2=$CLOJURE_HOME/core.specs.alpha-0.2.62.jar
CP3=$CLOJURE_HOME/spec.alpha-0.3.218.jar
exec java -cp $CP1:$CP2:$CP3 clojure.main "$0" "$@"
]
(use '[clojure.java.shell :only (sh)])
;; 引数の取得(文字列の配列)
(let [args *command-line-args*]
(println args))
;; OSコマンド実行
(defn run-cmd [cmd]
(let [res (sh cmd)]
(println "[Exit code]")
(println (:exit res))
(println "[Output]")
(println (:out res))
(println "[Error]")
(println (:err res))))
(run-cmd "ls")
;; 実行が完了しないので明示的に終了させる
(shutdown-agents)
この状態で以下のコマンドを実行してファイルに実行権限を与える
chmod +x sample.clj
あとは以下のように実行すればOK
sample.clj