bash - 如何在 GitHub 工作流中的 YAML 文件中设置包含空格的路径?

标签 bash docker yaml latex github-actions

我有一个存储库,其中一个文件夹中有一个 LaTex 文件。该文件夹名为Literature Review,文件名为Review.tex。我是 docker 和 GitHub Actions 的新手。我尝试了很多不同的组合来设置文件路径:

文学评论/Review.tex

我尝试了很多 StackOverflow 上建议的方法,但似乎我太天真了,无法正确理解实现 xD

我在某处读到,为了避免转义序列,我们可以在空格前使用 \。然而,这并没有太大的区别。

工作流在构建时返回以下错误:

Run echo ${MANUSCRIPT_PATH}.tex
  echo ${MANUSCRIPT_PATH}.tex
  ${LATEX} ${MANUSCRIPT_PATH}.tex
  ${BIBTEX} ${MANUSCRIPT_PATH}.aux
  ${LATEX} ${MANUSCRIPT_PATH}.tex
  ${LATEX} ${MANUSCRIPT_PATH}.tex
  shell: /bin/bash -e {0}
  env:
    MANUSCRIPT_PATH: Literature\ Review/Review
    LATEX: pdflatex -shell-escape
    BIBTEX: bibtex
Literature\ Review/Review.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex)
 \write18 enabled.
entering extended mode
! I can't find file `Literature'.
<to be read again> 
                   \ 
<*> Literature\ 
                Review/Review.tex
(Press Enter to retry, or Control-D to exit)
Please type another input file name: 
! Emergency stop.
<to be read again> 
                   \ 
<*> Literature\ 
                Review/Review.tex
!  ==> Fatal error occurred, no output PDF file produced!
Transcript written on texput.log.
Error: Process completed with exit code 1.

我的 yml 文件如下所示:

name: paper-maker

on: push

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      # This needs fixing
      MANUSCRIPT_PATH: 'Literature\ Review/Review' # exclude the '.tex' / '.pdf' extension!
      LATEX: pdflatex -shell-escape
      BIBTEX: bibtex
    steps: 
    - uses: actions/checkout@v1
    - name: Install texlive
      run: |
        sudo apt-get install texlive-publishers \
                             texlive-latex-recommended \
                             texlive-latex-extra \
                             texlive-fonts-recommended \
                             texlive-fonts-extra
    - name: Build paper
      run: |
        echo ${MANUSCRIPT_PATH}.tex
        ${LATEX} ${MANUSCRIPT_PATH}.tex
        ${BIBTEX} ${MANUSCRIPT_PATH}.aux
        ${LATEX} ${MANUSCRIPT_PATH}.tex
        ${LATEX} ${MANUSCRIPT_PATH}.tex
    - name: Push paper
      run: |
        git checkout --orphan ${GITHUB_REF##*/}-pdf
        git rm -rf .github/
        git rm -rf . 
        git add -f ${MANUSCRIPT_PATH##*/}.pdf
        git -c user.name='paper-maker' -c user.email='paper-maker' commit -m "update pdf"
        git push -q -f https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} ${GITHUB_REF##*/}-pdf

最佳答案

不要尝试单独转义空格字符,只需将生成的路径放在双引号中即可:

MANUSCRIPT_PATH: Literature Review/Review
${LATEX} "${MANUSCRIPT_PATH}.tex"
${BIBTEX} "${MANUSCRIPT_PATH}.aux"
${LATEX} "${MANUSCRIPT_PATH}.tex"
${LATEX} "${MANUSCRIPT_PATH}.tex"

似乎在变量替换之前处理了反斜杠转义,这就是您的方法不起作用的原因。

无论如何,将最终路径放在双引号中是长期确立的最佳做法。


编辑:详细说明一下,这与 Docker 或 YAML 无关。只需在 bash 中尝试这段代码:

mkdir -p a\ b && echo "foo" > a\ b/c.txt
P='a\ b/c' cat $P.txt

你会得到

cat: a\: No such file or directory
cat: b/c.txt: No such file or directory

如您所见,反斜杠在变量替换中转义以下空格。相反,shell 的行为就像您提供了两个参数 'a\''b/c.txt'

关于bash - 如何在 GitHub 工作流中的 YAML 文件中设置包含空格的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65193383/

相关文章:

javascript - 如何对用户以 html 表单输入的数据应用 stringify?

azure cli 无法识别以下命令 az ml data create -f <文件名>.yml

linux - 在 Linux 中替换 bash 中的 XML 值

linux - 尝试在 bash 脚本的 if 语句中使用 Grep -E 的输出

regex - 使用 sed 删除具有特定正则表达式的文件中的所有行

docker - docker sed arg变量未使用

bash - 如何使用 sed 从文件中打印行,其中行号存储为变量

alfresco - 如何在 Docker 上运行 Alfresco Bundled Installer?

docker - 如何连接到在 docker 容器上运行的远程 Jupyter Notebook?

HTML 表格到 YAML 的转换