4

scripts/shell/record_video.shプロジェクトの 1 つを呼び出す必要があるシェル スクリプトが保存されています。

コードでの使用例:

(defn save-mp4 [cam filename duration]
  (sh "scripts/shell/record_video.sh" (:i_url cam) filename (str duration)))

clojars にアップロードする場合にシェルスクリプトが含まれるように、プロジェクトを jar するにはどうすればよいですか?


ファローアップ

ありがとう@Ankur。は(sh "bash" :in bash-command-string)超便利です。そもそもファイルが必要だった唯一の理由は.sh、stdout に大きなもの (ビデオなど) が含まれている場合にリダイレクトを行う方法がよくわからなかったためです。

ファイルscripts/shell/record_video.shには次が含まれます。

SRC=rtsp://$1:554/axis-media/media.amp?resolution=1920x1080
DST=$2
LEN=$3
openRTSP -4 -d $LEN -w 1440 -h 1080 -f 25 -u root pass $SRC > $DST 2> /dev/null

>また、プログラムのメモリ消費量を膨大にせずにリダイレクト ( ) を変換する方法がわかりませんでした。この(sh "bash" :in bash-command-string)コマンドを使用すると、シェル スクリプトを使用せずに関数を記述できます。

(defn save-mp4 [cam filename duration]
  (let [src (format "rtsp://%s:554/axis-media/media.amp?resolution=1920x1080" (:i_url cam))
        cmd (format "openRTSP -4 -d %d -w 1440 -h 1080 -f 25 -u root pass %s > %s 2> /dev/null"
                    duration src filename)]
    (sh "bash" :in cmd)))
4

2 に答える 2

3

2 つのステップ:

  • シェル スクリプトをリソースとしてパッケージ化します。
  • JavaリソースAPIを使用してシェルスクリプトファイルを読み取り、使用します (sh "bash" :in file-str)

file str は、リソース API を使用して読み取られたシェル スクリプトの内容です。

于 2012-09-18T07:17:30.467 に答える
2

実際には2つの問題があります。まず、ファイルをjarファイルに入れる方法。2 つ目は、jar ファイル内からファイルにアクセスする方法です。

1 つ目は簡単です。リソース ディレクトリにファイルを含めます。そのディレクトリ内のすべてのファイルが jar ファイルに含まれています。

sh2 つ目は、jar ファイルに含まれているのではなく、ディスク上でスクリプトを探すことになるため、より困難です。class loader.getresource を使用してファイルを抽出し、ディスクに書き込んで実行する必要がある場合があります。

最も単純な方法でjarからリソースを読み取る方法についての議論があります(clojure.java.io/resource "myscript.js")

于 2012-09-18T03:25:23.320 に答える