Bash脚本获取完整路径(使用'source'来调用它)

在bash脚本中,是否有任何方法可以获得其自身的完整路径?

$ source ~/dev/setup.sh

我试过$ _,$ - ,$ 0 ...,但都是不相关的。

提前致谢。


使用realpath

$ realpath ~/dev/setup.sh

在脚本中:

rp=$(realpath "$0")
echo $rp

您可以使用BASH_SOURCE变量,然后使用readlink获取完整路径:

echo $BASH_SOURCE

# to get full path
fullpath=$(readlink --canonicalize --no-newline $BASH_SOURCE)
echo "$fullpath"

这将打印源文件的调用路径,所以在你的情况下:

~/dev/setup.sh
~/dev/setup.sh

参考

BASH_SOURCE

一个数组变量,其成员是源文件名,其中定义了FUNCNAME数组变量中相应的shell函数名。 shell函数${FUNCNAME[$i]}在文件${BASH_SOURCE[$i]}定义,并从${BASH_SOURCE[$i+1]}调用


$_变量用于源脚本的位置。

如果您正在采购脚本,则可以使用$_访问脚本名称(因为$0将是bash解释器)

纯粹的bash解决方案。

relname="$_";

# if script is in current directory, add ./
if [[ ! "$relname" =~ "/" ]]; then 
   relname="./$relname"; fi

relpath=`dirname $relname`;
name="${relname##*/}"

# convert to absolute path by cd-ing and using pwd.
cd "$relpath" >/dev/null;
path=`pwd`;
cd - >/dev/null;

# construct full path from absolute path and filename
fullpath="$path/$name";

请注意,此脚本具有用脚本目录替换$ OLDPWD(由cd - )的副作用。 如果您需要避免这种情况,只需在cd -之前保存$ OLDPWD并在最后恢复。

使用realpath

假设你已经安装了realpath命令,你可以用下面的代码替换这个代码:

fullpath=`realpath "$_"`
链接地址: http://www.djcxy.com/p/56813.html

上一篇: Bash script to get its full path (use 'source' to invoke it)

下一篇: custom icon in dialog