シンボリックリンクを解決せずに相対パスを絶対パスとして解決する移植可能な方法を探しています。
たとえば、/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
これらのコマンドがデフォルトで実行されているディレクトリスタックを印刷するのを防ぎます。これにより、目的の出力が中断される可能性があります。