기호 링크를 해결하지 않고 상대 경로를 절대 경로로 해결하는 이식 가능한 방법을 찾고 있습니다.
예를 들어 /home/nat/cat/bat/hat.sh
Bash에서 다음 파일을 실행합니다.
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
이러한 명령이 기본적으로 실행되는 디렉터리 스택을 인쇄하지 못하도록 방지합니다. 이로 인해 원하는 출력이 중단될 수 있습니다.