как упаковать сценарий оболочки в проект leiningen

У меня есть сценарий оболочки, сохраненный в scripts/shell/record_video.sh, который мне нужно вызвать в одном из моих проектов.

Пример его использования в коде:

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

как я могу сделать проект так, чтобы при загрузке в clojars был включен сценарий оболочки?


продолжение

Спасибо @Ankur. (sh "bash" :in bash-command-string) очень полезно. Единственная причина, по которой мне понадобился файл .sh, заключается в том, что я не мог понять, как выполнять перенаправления, когда стандартный вывод содержит что-то большое (например, видео).

файл 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 голоса | спросил zcaudate 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 18 Sep 2012 05:37:31 +0400 2012, 05:37:31

2 ответа


0

Два шага:

  • Упакуйте сценарий оболочки в качестве ресурса.
  • Прочитайте файл сценария оболочки, используя API ресурсов java, и используйте (sh "bash" :in file-str)

Где file str - содержимое сценария оболочки, читаемое с использованием API ресурса.

ответил Ankur 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 18 Sep 2012 11:17:30 +0400 2012, 11:17:30
0

У тебя на самом деле две проблемы. Сначала, как поместить файл в файл jar. Во-вторых, как получить доступ к файлу из файла JAR.

Первый достаточно прост: включите файл в каталог ресурсов. Все файлы в этом каталоге включены в файл JAR.

Второй вариант сложнее, так как sh будет искать сценарий на диске, а не в jar-файле. Возможно, вам придется извлечь файл с помощью класса loader.getresource и записать его на диск для его выполнения.

Существует обсуждение о том, как читать ресурс из баночка с самым простым существом (clojure.java.io/resource "myscript.js")

ответил M Smith 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 18 Sep 2012 07:25:23 +0400 2012, 07:25:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132