【发布时间】:2023-06-10 20:09:01
【问题描述】:
在我们的 git repo 代码集中有几个配置文件和 bash 脚本需要设置目录路径。他们都应该从存储库所在的位置开始。换句话说,我把我的回购放在/home/userMe,但你把它放在/home/userYou/code/。
如何构造 bash 脚本,以便它们:
- 不必编辑本地化根目录?
- 或者有一个首先运行的本地化脚本?
【问题讨论】:
在我们的 git repo 代码集中有几个配置文件和 bash 脚本需要设置目录路径。他们都应该从存储库所在的位置开始。换句话说,我把我的回购放在/home/userMe,但你把它放在/home/userYou/code/。
如何构造 bash 脚本,以便它们:
【问题讨论】:
执行此操作的常用方法是scripts to know where they are located,例如使用dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)。这样,必须引用同一存储库中的另一个脚本的每个脚本都可以通过对树的同一部分中的文件使用"${dir}/foo/bar" 样式路径和对具有相同祖父目录的文件使用"$(dirname -- "$(dirname -- "$dir")")/foo/bar" 来实现。这对于使您的脚本在任何地方都可以执行是必要的(但不一定足够)。
您当然可以source 位于存储库顶层的脚本执行相同的操作。然而,这实际上更复杂,因为每个脚本仍然必须能够定位该脚本相对于自身,此时它可能也知道自己的位置。
【讨论】:
dirname $0 doesn't work if there are spaces anywhere in the path。而且,如果您正在编写一个脚本供其他人从任意位置(如 OP)运行,那么您真的想让它难以破解。
dirname "$0",它可以与空格一起使用。