스크립트에서 작업 디렉터리 또는 접두사 경로를 cd하는 것이 더 낫습니까?

스크립트에서 작업 디렉터리 또는 접두사 경로를 cd하는 것이 더 낫습니까?

지정된 디렉터리에서 작업을 수행해야 하는 스크립트가 있는 경우 모든 경로 앞에 이 디렉터리를 추가하는 것이 더 낫습니까, 아니면 문제를 해결하고 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

선호되는 방법은 접두사를 사용하는 것입니다. 몇 가지 이유를 생각해 볼 수 있습니다.

  1. 읽고 유지하는 것이 더 쉽습니다. $WORK_DIR이전의 마지막 항목을 검색하는 것보다 스크립트 내에서 grep하는 것이 더 쉽습니다 cd. 특히 스크립트가 길고 cd스크립트 내에서 여러 번 수행하는 경우 더욱 그렇습니다.
  2. 특정 예에서 누군가가 스크립트를 편집하고 "process"와 "grep" 사이에 몇 줄을 추가하기로 결정한 경우 cd다른 디렉토리로 이동할 수 있으며, 이 경우 해당 grep줄은 실패합니다. 접두사를 사용하는 경우 그 사이에 무슨 일이 일어나는지는 중요하지 않습니다.
  3. 스크립트가 실행되는 동안 누군가 이를 삭제하고 다시 생성하면 $WORK_DIR스크립트는 삭제된 디렉토리에 있게 됩니다. 접두사를 사용하면 디렉터리가 삭제되고 다시 생성되더라도 새 디렉터리에 쓰게 됩니다.

답변2

두 번째 형식은 플래그를 설정하지 않고 스크립트를 실행하는 경우 위험합니다 -e. cd어떤 이유로든 실패 하면 다음 줄에서 실행이 계속됩니다.작업 디렉토리가 변경되지 않은 경우에도. 이는 원하는 것이 아니며 보안 취약점이 될 수도 있습니다.

관련 정보