在bash脚本中,有没有任何方法可以获得自己的完整路径?
$ source ~/dev/setup.sh
我尝试了$ _,$ - ,$ 0 ......,但都是无关紧要的。
提前致谢。
答案 0 :(得分:0)
答案 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
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 "$_"`