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)