当前位置:  开发笔记 > 编程语言 > 正文

bash脚本如何知道它来源时安装的目录.运营商?

如何解决《bash脚本如何知道它来源时安装的目录.运营商?》经验,为你挑选了2个好方法。

我想要做的是将文件中的设置包含到我当前的交互式bash shell中,如下所示:

$./path/to/some/dir/.settings

问题是.settings脚本还需要使用".".运算符包含其他文件,如下所示:

..extra_settings

如何在.settings文件中引用.extra_settings的相对路径?这两个文件始终存储在同一目录中,但此目录的路径将根据这些文件的安装位置而有所不同.

操作员总是知道/ path/to/some/dir /,如上所示..settings文件如何知道安装它的目录?我宁愿没有一个记录已安装目录名称的安装过程.



1> Jason Day..:

我相信$(dirname "$BASH_SOURCE")你会做你想要的,只要你采购的文件不是符号链接.

如果您要获取的文件可能是符号链接,则可以执行以下操作以获取真实目录:

PRG="$BASH_SOURCE"
progname=`basename "$BASH_SOURCE"`

while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
        PRG="$link"
    else
        PRG=`dirname "$PRG"`"/$link"
    fi
done

dir=$(dirname "$PRG")


要解决符号链接,你可以这样做:`dir = $(dirname $(readlink -f"$ BASH_SOURCE"))`

2> Jacob Lee..:

这可能是一个优雅的解决方案:

script_path="${BASH_SOURCE[0]}"
script_dir="$(cd "$(dirname "${script_path}")" && pwd)"

但是,在采购链接时,这不会起作用.在这种情况下,人们可能会这样做

script_path="$(readlink -f "$(readlink "${BASH_SOURCE[0]}")")"
script_dir="$(cd "$(dirname "${script_path}")" && pwd)"

请注意,类似${array[x]}的数组不符合POSIX.当然,该BASH_SOURCE阵列仅在Bash中可用.


BASH_SOURCE是一个表示调用堆栈的数组,第一个元素是当前正在执行的脚本.
推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有