获取命令的规范路径

获取命令的规范路径

我正在编写一个需要某些命令的规范路径的脚本。由于可能存在指向实际命令的符号链接,因此我用来readlink -f获取规范路径。但我没有得到我真正想要的东西readlink -f,我将用以下示例进行解释:

假设我当前的目录是:如果我尝试获取with/home/user/Documents 的路径,我会得到以下结果:sleepreadlink -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是规范的,这意味着它假设您的路径没有非规范组件。

相关内容