我正在尝试让我的 CV 构建脚本在 Ubuntu 上运行。我通常使用 Fedora 来构建它。每个页面都用 SVG 编写,我使用 Inkscape 生成 PDF,然后使用 pdfmerge 将这些页面合并为一个。
在 Ubuntu 上我找不到 pdfmerge,所以我想将其更改为 pdfunite。但似乎该命令不接受 glob 模式。它应该由 shell 处理:
pdfunite pl/jakub-jankiewicz-cv-page{1,2,3}.pdf jakub-jankiewicz-cv-pl.pdf
I/O Error: Couldn't open file 'pl/jakub-jankiewicz-cv-page{1,2,3}.pdf': No such file or directory.
Syntax Error: Could not merge damaged documents ('pl/jakub-jankiewicz-cv-page{1,2,3}.pdf')
make: *** [Makefile:22: jakub-jankiewicz-cv-pl.pdf] Błąd 255
这是我的 Makefile 中的代码:
jakub-jankiewicz-cv-pl.pdf: pl/jakub-jankiewicz-cv-page1.pdf pl/jakub-jankiewicz-cv-page2.pdf pl/jakub-jankiewicz-cv-page3.pdf
pdfunite pl/jakub-jankiewicz-cv-page{1,2,3}.pdf jakub-jankiewicz-cv-pl.pdf
为什么我不能在 Ubuntu 上使用像 {1,2,3} 这样的 glob 模式?我有 Xubuntu 22.04 和 bash,5.1.16(1)-release
相同的代码在 Fedora 上运行良好。
答案1
{1,2,3}
不是一个全局模式- 它是括号扩展。问题可能不在于“bash 无法读取”它 - 该命令默认make
使用 POSIX shell,在 Ubuntu 上它是符号链接的,而不是您的选项是:/bin/sh
/bin/dash
/bin/bash.
将括号扩展更改为实际的(符合 POSIX 标准的)全局变量 - 对于单个数字,这很简单,即
pl/jakub-jankiewicz-cv-page[123].pdf
通过添加,将 Makefile 中的 shell 更改为 bash
SHELL := /bin/bash
也可以看看Bash 中的 Makefile 异常!。