반달가면 이글루에서 백업 - http://bahndal.egloos.com/555894
리눅스 bash 스크립트에서 상대경로(relative path)를 절대경로(absolute path)로 바꿔서 표시하는 방법이다.
예를 들어 입력값이 "../abc", "~/downloads" 이런 식이라면 이것을 "/temp/data/abc/", "/home/john/downloads" 이런 식으로 절대경로 표시로 바꾸는 것이다. readlink 명령으로 간단하게 바꿀 수 있다.
우선 readlink의 -e 옵션을 보자. 입력하는 상대경로의 모든 항목이 유효해야 한다. 예를 들어 입력한 경로에 있는 디렉토리가 실제로 존재하지 않는다면 변환이 이루어지지 않는다.
# -e 옵션: 해당 항목이 모두 유효해야 함
readlink -e "~/downloads"
/home/john/downloads
# 존재하지 않는 경로일 경우 변환되지 않아 출력값이 없음
readlink -e "~/downloadsss"
반대로, -m 옵션을 이용하면 입력하는 상대경로의 항목에 대해 유효성을 따지지 않는다.
# -m 옵션: 항목에 대한 유효성 무시
readlink -m "~/downloadsss"
/home/john/downloadsss
출력값을 다른 명령어 또는 어플리케이션의 인자로 넘겨야 할 경우 출력값에서 줄바꿈(new line)을 제거할 필요가 있을 수도 있다. -n 옵션을 추가하면 된다. -n 옵션을 안 썼다고 문제가 된 적이 없기는 하나 혹시 몰라서 적어두기로.
# -n 옵션 추가: 출력할 때 줄바꿈 제거
path_info=`readlink -e -n "~/downloads"`
# 예시: 출력값을 find 명령의 인자로 사용
find "$path_info" -type f
스크립트에서 인자(argument)로 경로 정보를 받아서 이런 저런 작업을 처리할 때 절대경로 기준으로 통일하기 위해 가끔 사용중.
'bash script' 카테고리의 다른 글
[bash: grep] 한글 문자열 검색 (0) | 2023.04.17 |
---|---|
[bash: awk] awk에서 출력할 위치(필드)를 변수로 지정하기 (0) | 2023.04.17 |
[bash: for, case] 인자(argument) 처리 (0) | 2023.04.17 |
[bash: tr, sed] txt 파일에서 여러줄로 된 항목을 한줄로 바꾸기 - 2 (2) | 2023.04.13 |
리눅스 bash 스크립트에서 배열(array) 사용하기 (0) | 2023.04.11 |