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

时间:2016-03-01 09:24:44

标签: bash

在bash脚本中,有没有任何方法可以获得自己的完整路径?

$ source ~/dev/setup.sh

我尝试了$ _,$ - ,$ 0 ......,但都是无关紧要的。

提前致谢。

3 个答案:

答案 0 :(得分:0)

使用realpath

$ realpath ~/dev/setup.sh

在剧本中:

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

答案 1 :(得分:0)

您可以使用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

Reference

  

BASH_SOURCE

     

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

调用

答案 2 :(得分:0)

源代码脚本位置的$_变量。

如果您正在寻找脚本,可以使用$_访问脚本名称(因为$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 "$_"`