在Bash脚本中获取自身所在目录的方法
技术背景
在使用Bash脚本时,有时需要获取脚本自身所在的目录。比如,当脚本作为另一个应用程序的启动器时,需要将工作目录更改为脚本所在的目录,以便对该目录中的文件进行操作。然而,由于脚本的调用方式多样(如绝对路径、相对路径、符号链接等),获取脚本所在目录并非总是 straightforward。
实现步骤
1. 使用dirname
和$0
这是最基本的方法,$0
代表脚本的名称,dirname
用于提取路径中的目录部分。
#!/usr/bin/env bash
echo "The script you are running has:"
echo "basename: [$(basename "$0")]"
echo "dirname : [$(dirname "$0")]"
echo "pwd : [$(pwd)]"
不过,这种方法有局限性。如果脚本通过符号链接执行,会得到链接所在的路径;如果脚本被source
执行,$0
的值可能不是预期的脚本名称。
2. 使用readlink -f
readlink -f
可以将路径解析为绝对路径,结合dirname
可以得到脚本所在的目录。
dirname -- "$( readlink -f -- "$0"; )";
示例脚本:
#!/usr/bin/env bash
echo "pwd: `pwd`"
echo "\$0: $0"
ec