4

我保存了一个 shell 脚本scripts/shell/record_video.sh,我需要调用我的一个项目。

它在代码中的使用示例:

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

如果我上传到 clojars,我将如何 jar 项目以便包含 shell 脚本?


跟进

谢谢@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)命令允许在没有 shell 脚本的情况下编写我的函数:

(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

两步:

  • 将 shell 脚本打包为资源。
  • 使用 java 资源 API 读取 shell 脚本文件并使用 (sh "bash" :in file-str)

其中文件 str 是使用资源 API 读取的 shell 脚本内容。

于 2012-09-18T07:17:30.467 回答
2

你实际上有两个问题。首先如何将文件放入 jar 文件中。其次,如何从 jar 文件中访问该文件。

第一个很简单:将文件包含在资源目录中。该目录中的所有文件都包含在 jar 文件中。

第二个比较困难,因为sh要在磁盘上查找脚本,而不是放在 jar 文件中。您可能必须使用类 loader.getresource 提取文件,然后将其写入磁盘以执行它。

有一个关于如何从 jar 中读取资源的讨论,最简单的是(clojure.java.io/resource "myscript.js")

于 2012-09-18T03:25:23.320 回答