来自bash脚本通过Docker调用OCRmyPDF的错误响应

时间:2015-05-13 07:10:09

标签: linux bash shell docker

编辑(更新):通过继续搜索和测试,我发现问题似乎在于$ PWD(或$(dirs -l)或$($)的输出pwd))被docker解释为相对路径,尽管实际上是绝对的。

然而,复制的,然后粘贴的$ PWD,$(dirs -l),$(pwd)的输出仍然完美。这个终端打印输出与bash传递给docker的相同的变量有什么不同?

请耐心等待,我对任何类型的脚本都很陌生。因此,我不仅确定此脚本中存在明显的冗余,而且我可能遗漏了一些基本的东西。

我编写了一个小的bash脚本,试图将一个从Docker容器运行OCRmyPDF所需的冗长命令转换为更易于管理的命令。这是实现这一目标的长命令(根据创建者' s github):

docker run -t -i -v "</path/to/pdfdir>:/home/docker/" paulstaab/ocrmypdf \  
OCRmyPDF <additional options> <pdf> <out.pdf>

我的目标是创建一个名为 ocrmypdf 的脚本,它将获取一个名为.pdf和任何指定的参数,OCR为pdf文件,并输出一个带有原始名称的文件。 &#39; _ocr&#39;尾巴。

以下是我对bash脚本的尝试(脚本名称 - ocrmypdf ):

#!/bin/bash
#docker ocrmypdf ease-of-use script

BASENAME=$(basename "$1")
BASENOSUFFIX=$(basename -s .pdf "$1")
DIRECTORY=$(dirs -l):/home/docker/
docker run -t -i -v \"$DIRECTORY\" paulstaab/ocrmypdf \ OCRmyPDF $2 \"$BASENAME\" \""$BASENOSUFFIX"_OCR.pdf\"

我知道在脚本中可能不一定需要变量这么简单,但我已经实现了它们,因为我一直在进行故障排除。

问题当我运行脚本时,专注于我知道程序能够进行OCR的.pdf文件,我返回错误:< / p>

FATA[0000] Error response from daemon: cannot bind mount volume: "/home/blue/Documents/PDF/Massumi/1995 volume paths must be absolute.

然而,令我困惑的是,如果我回应&#39;脚本的最后一行,#34; docker run -t ...&#34;,如果复制到终端, echoed 输出效果很好。例如,......的输出 (最后一行回显

./ocrmypdf test.pdf -f

是(&#39; -f&#39;强制ocrmypdf到ocr a .pdf,无论已扫描的文本如何)

docker run -t -i -v "/home/blue/Documents/PDF/Massumi/1995:/home/docker/" paulstaab/ocrmypdf  OCRmyPDF -f "test.pdf" "test_OCR.pdf"

如果粘贴回终端,则成功OCRs&#39; test.pdf&#39; 。但是,当脚本在没有最后一行 echoed 的情况下运行时,我收到了“无法绑定挂载卷”的情况。上面列出的错误。

1 个答案:

答案 0 :(得分:1)

我认为问题出在你的DIRECTORY变量中。 尝试在:声明中的DIRECTORY=$(dirs -l)\:/home/docker/前加一个反斜杠。 并且,您应该通过安全性双重引用您的变量,在这种情况下,$DIRECTORY命令中的$2$BASENAMEdocker