내 스크립트모든 하위 하위 디렉터리를 반복합니다.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