如何在 bash 中获取通过 $PATH 执行的脚本的绝对路径? [复制]

Posted

技术标签:

【中文标题】如何在 bash 中获取通过 $PATH 执行的脚本的绝对路径? [复制]【英文标题】:How can I get absolute path to a script executed via $PATH in bash? [duplicate]如何在 bash 中获取通过 $PATH 执行的脚本的绝对路径? [复制] 【发布时间】:2017-05-04 17:46:42 【问题描述】:

我想获得执行脚本的绝对路径。 它的路径是/use/local/lib/debugger.sh。 它是通过 $PATH=/use/local/lib 从另一个文件夹调用的。 我搜索了一个示例脚本并找到了以下一个。

echo "path = $(cd $(dirname $0) && pwd)"

我希望我能得到绝对路径,/use/local/lib。但结果不是我所期望的。我得到了调用脚本的目录的绝对路径。

如何获取脚本所在的绝对路径?

非常感谢。

【问题讨论】:

【参考方案1】:

-P 选项添加到pwd 将确保正确解析脚本dirname 中的符号链接(如果有):

path=$(cd $(dirname $0) && pwd -P)

【讨论】:

这是一个帮助,但它不能解决 OP 想要的问题【参考方案2】:

使用这个:

#!/bin/bash

path="path = $(cd $(dirname $0) && pwd)"
script_name="$0##*/"

echo "$path/$script_name"

或者在“oneliner”风格echo "path = $(cd $(dirname $0) && pwd)/$0##*/"

【讨论】:

【参考方案3】:

如果它确实在您的 $PATH 中,那么“which”命令应该会找到它。

【讨论】:

以上是关于如何在 bash 中获取通过 $PATH 执行的脚本的绝对路径? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 bash 中获取给定路径的根目录?

PATH环境 变量

在 bash 中,如何清除当前输入?

在 bash 中,如何清除当前输入?

在linux shell(bash)编程中,如何通过递归方式遍历文件

linux shell脚本如何获取“当前工作路径”,“执行脚本所在路径”,“执行脚本所在路径和执行路径的相对路径”?(当前目录)