Bash脚本当中获取当前脚本绝对路径位置

Bash脚本当中获取当前脚本绝对路径位置

在 Bash 脚本中,一般使用命令获取当前目录,而不是直接依赖相对路径,这是因为相对路径的基础是脚本的运行位置,相对路径可能会因为脚本的运行位置不同而发生变化,导致脚本找不到指定文件或目录。获取脚本所在的目录可以使脚本更具通用性和可靠性,不论脚本从哪里被调用,都可以正确找到相关文件。

Content

1. 获取脚本所在目录的通用方法

一般使用以下命令来获取脚本的当前目录(即脚本所在的目录):

script_dir=$(cd "$(dirname "$0")" && pwd)
  • $0 表示脚本的文件名,是一个特殊变量。
  • $(dirname "$0") 获取脚本所在的目录(相对路径)。
  • cd "$(dirname "$0")" 切换到该目录,pwd 命令获取绝对路径。

这样 script_dir 就是脚本的绝对路径所在的目录。

2. 为什么不用相对路径?

相对路径依赖于执行脚本时的工作目录,如果你在不同目录下运行脚本,相对路径可能导致找不到文件。例如:

# 示例脚本 test.sh
# 如果直接使用相对路径 ./data/file.txt
cat ./data/file.txt

假设 test.sh 脚本在 /home/user/scripts 目录中,而文件 file.txt 位于 /home/user/scripts/data/ 中,那么只有当用户在 /home/user/scripts 目录运行脚本时,才能找到 file.txt。如果在其他位置运行,例如 /home/user 目录下运行 scripts/test.sh,脚本就会找不到文件。

通过获取脚本的绝对路径,可以确保不论在哪个目录执行脚本,文件的路径都不会出错:

script_dir=$(cd "$(dirname "$0")" && pwd)
cat "$script_dir/data/file.txt"

3. $0 的作用

$0 是一个特殊变量,在 Bash 脚本中表示脚本的文件名或脚本的路径(取决于调用方式)。例如:

  • 直接调用:如果用 ./script.sh 调用,$0 会是 ./script.sh
  • 使用绝对路径:如果用 /home/user/script.sh 调用,$0 会是 /home/user/script.sh
  • 通过 bash 调用bash script.sh 会使 $0 显示为 script.sh

因此,通过 $0dirname 可以获得脚本文件的所在目录,以构建一个可靠的绝对路径。

posted @ 2024-11-01 20:36  Gold_stein  阅读(30)  评论(0编辑  收藏  举报