我有一个存储库,其中一个文件夹中有一个 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/