bash脚本:如何找到"symlink/.."的绝对路径?

dag*_*ies 8 unix linux bash shell filepath

鉴于两个文件:

generic/scripts/hello.sh
parent/scripts -> generic/scripts
Run Code Online (Sandbox Code Playgroud)

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

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

解决方案不起作用:

`dirname $0`/..
realpath  `dirname $0`/..
readlink -f `dirname $0`/..
`cd *something*/..; pwd`
`perl ... abs_path(...)`
Run Code Online (Sandbox Code Playgroud)

所有这些都将指向generic而不是parent因为象征性的联系.

涉及正则表达式的所有内容都不具有适应性/通用性,对于更复杂的路径可能会失败...路径中可能还有其他符号链接,你想要祖父,它是一个涉及的目录名..,你通过$ PATH调用它...

而且,我希望它在任何情况下都可以工作,即使它被称为通过$PATH.

这个简单问题的任何简单安全解决方案?我的意思是它毕竟只是获取父目录!

我用过的:

dir=$( dirname $( cd `dirname $0` >/dev/null; pwd ) )
Run Code Online (Sandbox Code Playgroud)

Dunno如果它是完美的但似乎表现得像预期的那样.

jll*_*gre 5

试试这个:

basename $(dirname $(dirname $0))
Run Code Online (Sandbox Code Playgroud)

或者只是

$(dirname $(dirname $0))
Run Code Online (Sandbox Code Playgroud)

目前还不清楚你是否想要parent独自或完整的道路.