pathexpand 함수

pathexpand 함수

pathexpand는 ~ 세그먼트로 시작할 수 있는 파일시스템 경로를 받아서, 그 세그먼트를 현재 사용자의 홈 디렉터리 경로로 바꿔줘요. 경로를 절대 경로로 확장하고 싶을 때 유용하죠.

출처: Packer 공식 문서

본문

이 함수는 경로 문자열만 다루고 파일시스템 자체에는 접근하지 않아요. 그래서 심볼릭 링크 같은 파일시스템 기능은 고려할 수 없어요.

경로의 첫 세그먼트가 ~가 아니라면 주어진 경로가 수정 없이 그대로 반환돼요.

이 함수를 리소스 인자에 쓰면, 홈 디렉터리 경로가 다른 여러 사용자가 같은 구성을 실행하거나 다른 호스트 운영체제에서 사용할 때 원치 않는 diff가 생길 수 있어요. SSH 키 위치를 찾기 위한 connection·provisioner 블록 같은 일시적인 값에만 쓰는 걸 권장해요.

현재 사용자의 "홈 디렉터리"를 결정하는 규칙은 호스트 운영체제에 따라 달라져요.

Unix 시스템에서는 다음 출처를 우선순위 순으로 확인해요:

  • HOME 환경 변수.
  • getent passwd를 실행한 뒤 Packer 프로세스 uid를 합친 결과.
  • sh에서 cd && pwd를 실행한 결과.

Windows 시스템에서는 Unix와 같은 의미의 홈 디렉터리 개념은 없지만, 다음 출처를 우선순위 순으로 확인해요:

  • HOME 환경 변수.
  • 둘 다 설정된 경우 HOMEDRIVE와 HOMEPATH 환경 변수.
  • USERPROFILE 환경 변수.

각 운영체제에 적용되는 정확한 규칙은 Packer의 향후 릴리스에서 바뀔 수 있어요.

예시 (Examples)

> pathexpand("~/.ssh/id_rsa")
/home/steve/.ssh/id_rsa
> pathexpand("/etc/resolv.conf")
/etc/resolv.conf