지정된 디렉터리에서 작업을 수행해야 하는 스크립트가 있는 경우 모든 경로 앞에 이 디렉터리를 추가하는 것이 더 낫습니까, 아니면 문제를 해결하고 cd
작업 디렉터리에 저장하는 것이 좋습니다. 예를 들어
WORK_DIR="$1"
process data >"$WORK_DIR/result.txt"
grep "Error" "$WORK_DIR/result.txt"
또는
WORK_DIR="$1"
cd "$WORK_DIR"
process data >result.txt
grep "Error" result.txt
를 사용하여 이 스크립트를 실행하면 차이가 있다는 것을 알고 있지만 source
이를 수행하는 선호/편리한 방법이 있습니까?
답변1
선호되는 방법은 접두사를 사용하는 것입니다. 몇 가지 이유를 생각해 볼 수 있습니다.
- 읽고 유지하는 것이 더 쉽습니다.
$WORK_DIR
이전의 마지막 항목을 검색하는 것보다 스크립트 내에서 grep하는 것이 더 쉽습니다cd
. 특히 스크립트가 길고cd
스크립트 내에서 여러 번 수행하는 경우 더욱 그렇습니다. - 특정 예에서 누군가가 스크립트를 편집하고 "process"와 "grep" 사이에 몇 줄을 추가하기로 결정한 경우
cd
다른 디렉토리로 이동할 수 있으며, 이 경우 해당grep
줄은 실패합니다. 접두사를 사용하는 경우 그 사이에 무슨 일이 일어나는지는 중요하지 않습니다. - 스크립트가 실행되는 동안 누군가 이를 삭제하고 다시 생성하면
$WORK_DIR
스크립트는 삭제된 디렉토리에 있게 됩니다. 접두사를 사용하면 디렉터리가 삭제되고 다시 생성되더라도 새 디렉터리에 쓰게 됩니다.
답변2
두 번째 형식은 플래그를 설정하지 않고 스크립트를 실행하는 경우 위험합니다 -e
. cd
어떤 이유로든 실패 하면 다음 줄에서 실행이 계속됩니다.작업 디렉토리가 변경되지 않은 경우에도. 이는 원하는 것이 아니며 보안 취약점이 될 수도 있습니다.