Bash
Bash:如何將目前工作目錄循環設置為目前目錄?
我的腳本遍歷所有子子目錄並在所有 .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