私のスクリプトすべての子サブディレクトリを繰り返します。pdflatex
そして、すべての.texファイルに対してコマンドを呼び出します。
#!/usr/bin/env bash
shopt -s globstar
for d in ./*/**/*.tex; do
echo pdflatex "$d"
done
私の質問
ループ内の現在の作業ディレクトリを現在のサブディレクトリに設定するには?
エマルジョン:現在の作業ディレクトリをスクリプトディレクトリに設定するには?
私はなぜ尋ねるのですか?
私の.texファイルには相対パスが含まれているため、現在の作業ディレクトリがファイルがあるディレクトリである場合にのみコンパイラが機能します。
ベストアンサー1
cd
ループ内にコマンドを入れる必要があります。問題は、パスが現在のディレクトリに基づいているため、相対パスを使用するには、cd
各反復の開始時に作業ディレクトリを開始点にリセットする必要があることです。サブシェルは( ... )
これを行います(ディレクトリの変更はサブシェルの範囲内でのみ保持されます)。
#!/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