realpath
명령이 존재하지 않는다는 점을 감안할 때모든 UNIX 플랫폼realpath
, 명령 대체를 사용하여 readlink
쉘 스크립트를 가능한 한 크로스 플랫폼으로 만들고 싶습니다 .
문제는 내 경우에 필요한 매개변수 realpath
가 있다는 것입니다.--relative-to
$ realpath bdd/full --relative-to bdd
full
반면에 readlink
명령의 주요 기능만 제공되는 것 같습니다 realpath
.
$ readlink -f bdd/full
/home/user/bdd/full
읽고 나서매뉴얼 페이지, 유사한 매개변수를 찾을 수 없습니다 --relative-to
.
readlink
유사한 기능이 지원되는지 알고 있습니까 ? 그렇지 않은 경우 다른 크로스 플랫폼 명령을 사용하여 이러한 기능을 달성할 수 있는 --relative-to
"깨끗한" 방법이 있습니까 ?readlink
고쳐 쓰다:
내 경우에는 --relative-to
로깅 목적으로 셸 스크립트에서 사용자가 두 가지 상대 경로, 즉 기본 폴더에 대한 상대 경로와 작업이 수행될 파일에 대한 상대 경로를 전달합니다. 보다 사용자 친화적인 로그 항목을 인쇄하기 위해 기본 폴더 경로에서 파일의 상대 경로를 인쇄하고 싶습니다.
현재 목표를 달성하기 위해 다음 기능을 사용하고 있습니다.
get_relative_path () {
if command -v realpath &> /dev/null
then
realpath --relative-to="${2-$PWD}" "$1"
else
python -c 'import os.path, sys;print os.path.relpath(sys.argv[1],sys.argv[2])' "$1" "${2-$PWD}"
fi
}