Linux パスから相対パス コンポーネントを削除するには、Perl を取得する必要があります。私が望むことをほぼ実行する関数がいくつか見つかりましたが、次のとおりです。
File::Spec->rel2abs
あまりにも少ないです。「..」をディレクトリに正しく解決しません。
Cwd::realpath
やりすぎ。パス内のすべてのシンボリック リンクが解決されますが、これは望ましくありません。
おそらく、この関数がどのように動作するかを説明する最良の方法は、bash ログを投稿することです。ここで、FixPath は、目的の出力を提供する架空のコマンドです。
'/tmp/test'$ mkdir -p a/b/c1 a/b/c2
'/tmp/test'$ cd a
'/tmp/test/a'$ ln -s b link
'/tmp/test/a'$ ls
b link
'/tmp/test/a'$ cd b
'/tmp/test/a/b'$ ls
c1 c2
'/tmp/test/a/b'$ FixPath . # rel2abs works here
===> /tmp/test/a/b
'/tmp/test/a/b'$ FixPath .. # realpath works here
===> /tmp/test/a
'/tmp/test/a/b'$ FixPath c1 # rel2abs works here
===> /tmp/test/a/b/c1
'/tmp/test/a/b'$ FixPath ../b # realpath works here
===> /tmp/test/a/b
'/tmp/test/a/b'$ FixPath ../link/c1 # neither one works here
===> /tmp/test/a/link/c1
'/tmp/test/a/b'$ FixPath missing # should work for nonexistent files
===> /tmp/test/a/b/missing