Bash 无法读取 glob 模式

Bash 无法读取 glob 模式

我正在尝试让我的 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.

  1. 将括号扩展更改为实际的(符合 POSIX 标准的)全局变量 - 对于单个数字,这很简单,即pl/jakub-jankiewicz-cv-page[123].pdf

  2. 通过添加,将 Makefile 中的 shell 更改为 bashSHELL := /bin/bash

也可以看看Bash 中的 Makefile 异常!

相关内容