编辑(更新):通过继续search和testing,我发现这个问题似乎是由docker解释为相对path的$ PWD(或$(dirs -l)或$(pwd))的输出,尽pipe实际上是绝对的。
然而,$ PWD,$(dirs -l),$(pwd)的拷贝,然后粘贴输出仍然function完好。 这个terminal打印输出与bash传递给docker的variables是不同的?
请忍耐,我对任何脚本都很陌生。 因此,我不仅确定这个脚本中有明显的冗余,而且我可能会错过一些基本的东西。
我已经写了一个小的bash脚本,试图将需要从Docker容器运行OCRmyPDF的冗长的命令转换成更易于pipe理的命令。 这是实现这一点的长命令(根据创build者的github):
docker run -t -i -v "</path/to/pdfdir>:/home/docker/" paulstaab/ocrmypdf \ OCRmyPDF <additional options> <pdf> <out.pdf>
我的目标是创build一个名为ocrmypdf的脚本,它将采用一个命名的.pdf和任何指定的参数,OCR PDF文件,并输出一个文件名为带有'_ocr'尾部的原始文件。
这是我尝试在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\"
我知道这个简单的脚本中不一定需要variables,但是我已经实现了它们,因为我一直在进行故障排除。
问题是 ,当我运行脚本,集中在一个.pdf文件,我知道该程序能够OCR,我返回错误 :
FATA[0000] Error response from daemon: cannot bind mount volume: "/home/blue/Documents/PDF/Massumi/1995 volume paths must be absolute.
然而,让我感到困惑的是,如果我回显脚本的最后一行“docker run -t …”,那么如果复制到terminal中,则回显输出完美地工作。 例如,…的输出(最后一行回显 )
./ocrmypdf test.pdf -f
是('-f'强制ocrmypdf不pipe已经扫描的文本是否为.pdf)
docker run -t -i -v "/home/blue/Documents/PDF/Massumi/1995:/home/docker/" paulstaab/ocrmypdf OCRmyPDF -f "test.pdf" "test_OCR.pdf"
如果粘贴回terminal,则成功OCR“test.pdf” 。 但是,当脚本运行没有最后一行时,我收到上面列出的“无法绑定安装量”错误。
我认为这个问题在你的DIRECTORY
变量中。 尝试在这个声明中加上一个反斜杠:
DIRECTORY=$(dirs -l)\:/home/docker/
。 你应该通过安全的双引号你的变量,在这种情况下,你的$BASENAME
命令中的$DIRECTORY
, $2
和$BASENAME
。