Gar*_*ary 12 unix linux bash shell scripting
我想要做的是将文件中的设置包含到我当前的交互式bash shell中,如下所示:
$./path/to/some/dir/.settings
问题是.settings脚本还需要使用".".运算符包含其他文件,如下所示:
..extra_settings
如何在.settings文件中引用.extra_settings的相对路径?这两个文件始终存储在同一目录中,但此目录的路径将根据这些文件的安装位置而有所不同.
操作员总是知道/ path/to/some/dir /,如上所示..settings文件如何知道安装它的目录?我宁愿没有一个记录已安装目录名称的安装过程.
Jas*_*Day 19
我相信$(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")
Run Code Online (Sandbox Code Playgroud)
这可能是一个优雅的解决方案:
script_path="${BASH_SOURCE[0]}"
script_dir="$(cd "$(dirname "${script_path}")" && pwd)"
Run Code Online (Sandbox Code Playgroud)
但是,在采购链接时,这不会起作用.在这种情况下,人们可能会这样做
script_path="$(readlink -f "$(readlink "${BASH_SOURCE[0]}")")"
script_dir="$(cd "$(dirname "${script_path}")" && pwd)"
Run Code Online (Sandbox Code Playgroud)
请注意,类似${array[x]}的数组不符合POSIX.当然,该BASH_SOURCE阵列仅在Bash中可用.