我正在编写一个需要某些命令的规范路径的脚本。由于可能存在指向实际命令的符号链接,因此我用来readlink -f
获取规范路径。但我没有得到我真正想要的东西readlink -f
,我将用以下示例进行解释:
假设我当前的目录是:如果我尝试获取with/home/user/Documents
的路径,我会得到以下结果:sleep
readlink -f
/home/user/Documents/sleep
我真正想要的是/bin/sleep
答案1
readlink -f "$(type -P sleep)"
或者如果您注重绩效:
cpath="$(type -P sleep)"; [ ! -L "$cpath" ] || cpath="$(readlink -f "$cpath")"
使用readlink -e
(existing) 代替可以避免readlink -f
这种操作不存在文件的事故。
第二个示例假设返回的路径type -P
是规范的,这意味着它假设您的路径没有非规范组件。