Bash

Bash:如何將目前工作目錄循環設置為目前目錄?

  • February 21, 2020

我的腳本遍歷所有子子目錄並在所有 .tex 文件上呼叫pdflatex命令:

#!/usr/bin/env bash

shopt -s globstar

for d in ./*/**/*.tex; do
 echo pdflatex "$d"
done

我的問題

如何在循環中將目前工作目錄設置為目前子目錄?

類似的問題:如何將目前工作目錄設置為腳本目錄?

為什麼我問

我的 .tex 文件包含相對路徑,這就是為什麼編譯器僅在目前工作目錄是文件所在目錄時才起作用的原因。

您需要將cd命令放入循環中。問題是您的路徑是相對於目前目錄的,因此必須在每次迭代開始時將工作目錄重置回起點,以便cd使用您的相對路徑。子shell 為我們執行此( ... )操作(目錄更改僅在子shell 的範圍內持續)。

#!/usr/bin/env bash
shopt -s globstar

for d in ./*/**/*.tex
do
   dir="${d%/*}"     # Strip the *.tex pathname back to the containing directory
   tex="${d##*/}"    # Strip the *.tex pathname back to just the filename

   echo "Will process $tex in the subdirectory $dir" >&2
   (
       cd "$dir" || exit
       pdflatex "$tex"
   )
done

引用自:https://unix.stackexchange.com/questions/568892