涉及符号链接时,如何获取脚本目录的目录?

时间:2020-02-07 16:51:44

标签: linux bash

我有一个〜/ .bash_aliases文件,已将它链接到〜/ dev / bash_scripts / bash_aliases.sh上git回购中的文件

当运行.bash_aliases时,我希望它运行〜/ dev / bash_scripts / bash_functions.sh,但是我不想对该路径进行硬编码。如果可能的话,我想避免建立到bash_functions.sh的符号链接。我该怎么做?

目标: 即使我的存储库是〜/ dev / blah / bash_scripts,只要我将符号链接设置为bash_aliases.sh,它就可以运行始终与bash_aliases.sh位于同一目录的bash_functions.sh

编辑:添加更多细节以供澄清

我希望bash_aliases.sh能够找到bash_functions.sh的路径并执行它,而不管它从何处执行。

Hiro@penguin:~/dev/bash_scripts$ tree
.
├── bash_aliases.sh
└── bash_functions.sh
Hiro@penguin:~$ ls -la|grep .bash
lrwxrwxrwx   1 Hiro Hiro     49 Dec 16 11:49 .bash_aliases -> /home/Hiro/dev/bash_scripts/bash_aliases.sh

2 个答案:

答案 0 :(得分:0)

要获得没有bash_aliases.sh符号链接的真实路径,您可以执行以下操作:

dirname "$(readlink -f "${BASH_SOURCE[0]}")"

因此,要调用位于同一路径的脚本bash_functions.sh,可以编写:

"$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"/bash_functions.sh

答案 1 :(得分:0)

尝试这样的方法以允许各种特殊情况:

# directory original file is in
dir0="$( cd "$(dirname "$( readlink "$0" || ls -1 "$0" )")" && pwd -P )"

这将读取任何符号链接,否则将使用真实名称。然后它cd到该目录以获取其物理路径,从而跳过任何其他符号链接异常。