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 可以获得脚本文件的所在目录,以构建一个可靠的绝对路径。

本文作者:Gold_stein

本文链接:https://www.cnblogs.com/smartljy/p/18521215

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Gold_stein  阅读(260)  评论(0编辑  收藏  举报
历史上的今天:
2023-11-01 1113. 红与黑
2023-11-01 1112.迷宫
2019-11-01 ACwing : 798. 差分矩阵
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 逃离地面 RAD & 三浦透子
逃离地面 - RAD & 三浦透子
00:00 / 00:00
An audio error has occurred.

作词 : 野田洋次郎

作曲 : 野田洋次郎

空飛ぶ羽根と引き換えに 繋ぎ合う手を選んだ僕ら

それでも空に魅せられて 夢を重ねるのは罪か

夏は秋の背中を見て その顔を思い浮かべる

憧れなのか、恋なのか 叶わぬと知っていながら

重力が眠りにつく 1000年に一度の今日

太陽の死角に立ち 僕らこの星を出よう

彼が眼を覚ました時 連れ戻せない場所へ

「せーの」で大地を蹴って ここではない星へ

行こう

もう少しで運命の向こう もう少しで文明の向こう

もう少しで運命の向こう もう少しで

夢に僕らで帆を張って 来たるべき日のために夜を超え

いざ期待だけ満タンで あとはどうにかなるさと 肩を組んだ

怖くないわけない でも止まんない

ピンチの先回りしたって 僕らじゃしょうがない

僕らの恋が言う 声が言う

「行け」と言う