我想要做的是将文件中的设置包含到我当前的交互式bash shell中,如下所示:
$./path/to/some/dir/.settings
问题是.settings脚本还需要使用".".运算符包含其他文件,如下所示:
..extra_settings
如何在.settings文件中引用.extra_settings的相对路径?这两个文件始终存储在同一目录中,但此目录的路径将根据这些文件的安装位置而有所不同.
操作员总是知道/ path/to/some/dir /,如上所示..settings文件如何知道安装它的目录?我宁愿没有一个记录已安装目录名称的安装过程.
我相信$(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")
这可能是一个优雅的解决方案:
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中可用.