Bash 无法读取 glob 模式

jcu*_*bic 0 command-line bash pdf

我正在尝试让我的简历构建脚本在 Ubuntu 上运行。我通常使用 Fedora 来构建它。每个页面都是用 SVG 编写的,我使用 Inkscape 生成 PDF,然后使用 pdfmerge 将这些页面合并为一个。

\n

在 Ubuntu 上我找不到 pdfmerge 所以我想将其更改为 pdfunite。但该命令似乎不接受全局模式。它应该由 shell 处理:

\n
pdfunite pl/jakub-jankiewicz-cv-page{1,2,3}.pdf jakub-jankiewicz-cv-pl.pdf\nI/O Error: Couldn't open file 'pl/jakub-jankiewicz-cv-page{1,2,3}.pdf': No such file or directory.\nSyntax Error: Could not merge damaged documents ('pl/jakub-jankiewicz-cv-page{1,2,3}.pdf')\nmake: *** [Makefile:22: jakub-jankiewicz-cv-pl.pdf] B\xc5\x82\xc4\x85d 255\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的 Makefile 中的代码:

\n
jakub-jankiewicz-cv-pl.pdf: pl/jakub-jankiewicz-cv-page1.pdf pl/jakub-jankiewicz-cv-page2.pdf pl/jakub-jankiewicz-cv-page3.pdf\n    pdfunite pl/jakub-jankiewicz-cv-page{1,2,3}.pdf jakub-jankiewicz-cv-pl.pdf\n
Run Code Online (Sandbox Code Playgroud)\n

为什么我不能在 Ubuntu 上使用像 {1,2,3} 这样的全局模式?我有 Xubuntu 22.04 和 bash,5.1.16(1)-release相同的代码在 Fedora 上运行良好。

\n

ste*_*ver 6

{1,2,3}不是一个全局模式- 它是一个大括号扩展。问题可能不是“bash 无法读取”它 - 而是该命令默认make使用 POSIX shell,在 Ubuntu 上它是符号链接的,而不是您的选项是:/bin/sh/bin/dash/bin/bash.

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

  2. 将 Makefile 中的 shell 更改为 bash,方法是添加SHELL := /bin/bash

另请参阅Makefile中Bash异常!