On我在MacOS上,但正在寻找一个也适用于* nix的跨平台解决方案。简单的问题,如何使用bash脚本解决此路径?
/Users/Olegzandr/.nvm/versions/node/v7.2.0/bin/../lib/node_modules/suman/cli/cli.sh
这条道路由我手中的两件作品组成:
/Users/Olegzandr/.nvm/versions/node/v7.2.0/bin
和
../lib/node_modules/suman/cli/cli.sh
获得表示这两条路径分辨率的绝对路径的最佳方法是什么?
请注意,我的Mac上有readlink
,但它似乎与* nix机器上的实用程序不同。最重要的是,我的readlink
实用程序没有* nix实用程序可能执行的-f
选项,所以我似乎无法使用它。
答案 0 :(得分:1)
bash
完全能够处理这样的任务。从主要问题评论中汲取灵感,你可以做到这样的事情:
MYPATH=/Users/Olegzandr/.nvm/versions/node/v7.2.0/bin/../lib/node_modules/suman/cli/cli.sh
RESOLVED="$(cd $(dirname $MYPATH) && pwd)/$(basename $MYPATH)"
dirname
返回末尾没有文件名的路径cd
更改了我们获得的目录,pwd
显示当前目录。basename
与dirname
相反,并返回文件名。cd
readlink
实用程序。使用-m
选项似乎对我来说效果很好。这个标志在Mac上可用吗?
readlink -m /home/myusername/Documents/test_dir/dir_1/../dir_2/test.sh
> /home/myusername/Documents/test_dir/dir_2/test.sh
答案 1 :(得分:-1)
目前,我这样解决了
{{1}}
坦率地说,bash 并非很酷。我不得不求助于这种恶作剧的事实是荒谬的。