给定两个文件:

generic/scripts/hello.sh
parent/scripts -> generic/scripts

从任何位置调用parent/scripts/hello.sh后,我想(在脚本中)找到父目录的完整路径。在这种情况下,parent

主要问题是parent/scripts/..指的是unix中的generic。另一方面,涉及正则表达式的所有内容都不通用,可能容易出错。

无效的解决方案:
`dirname $0`/..
realpath  `dirname $0`/..
readlink -f `dirname $0`/..
`cd *something*/..; pwd`
`perl ... abs_path(...)`

由于符号链接(symbolic link),所有这些都将指向generic而不是parent

涉及正则表达式的所有内容均不可适应/泛型,可能会因为更复杂的路径而失败。路径中可能还有其他..和符号链接(symbolic link),您需要祖 parent ,这是涉及..的目录名,您可以通过$ PATH进行调用...

而且,即使通过$PATH调用它,我也希望它能在任何情况下都起作用。

有什么简单的安全解决方案可以解决这个简单的问题?我的意思是毕竟这只是在获取父目录!

我使用的是:
dir=$( dirname $( cd `dirname $0` >/dev/null; pwd ) )

邓诺(Dunno),如果它是完美的,但似乎表现出预期。

最佳答案

试试这个:

basename $(dirname $(dirname $0))

也许只是
$(dirname $(dirname $0))

目前尚不清楚您是想单独使用parent还是使用完整路径。

关于linux - bash脚本: how to find the absolute path of "symlink/.."?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6267753/

10-16 07:04