Bash에서 심볼릭 링크를 해결하지 않고 상대 경로를 해결합니다.

Bash에서 심볼릭 링크를 해결하지 않고 상대 경로를 해결합니다.

기호 링크를 해결하지 않고 상대 경로를 절대 경로로 해결하는 이식 가능한 방법을 찾고 있습니다.

예를 들어 /home/nat/cat/bat/hat.shBash에서 다음 파일을 실행합니다.

set -x
pwd
# cat is a symlink
readlink -e ..
# abs is an imaginary function that returns the path in the form specified by this question    
abs ..
abs /home/./nat/../nat/cat

산출:

+ pwd
/home/nat/cat/bat
+ readlink -e ..
/home/nat/cat-1.12.0
+ abs ..
/home/nat/cat
+ abs /home/./nat/../nat/cat
/home/nat/cat

realpath -s불행히도 OSX에서는 기본적으로 사용할 수 없기 때문에 사용할 수 없습니다 .

답변1

가상 함수 구체화는 다음과 같습니다.

abs () {
  local _PWD _BN
  [ -d "${1}" ] && _PWD="${1}"
  [ -f "${1}" ] && { _PWD=$(dirname "${1}") ;  _BN=/$(basename "${1}") ;}
  pushd $_PWD >/dev/null
  echo $(pwd)${_BN}
  popd >/dev/null
}

파일 또는 디렉터리 경로를 인수로 전달할 수 있습니다. 그런 다음 지정된 경로로 이동하여 원하는 작업 디렉터리를 인쇄합니다. 특정 요구 사항에 따라 빈 매개 변수, 존재하지 않는 경로 또는 권한 부족 등에 대한 일부 유효성 검사를 추가해야 할 수도 있습니다. 이 예에서는 이를 생략했습니다.

두 사람이 pushd/popd목표물을 향해 점프했다가 돌아오는 동작을 수행한다.

>/dev/null이러한 명령이 기본적으로 실행되는 디렉터리 스택을 인쇄하지 못하도록 방지합니다. 이로 인해 원하는 출력이 중단될 수 있습니다.

관련 정보