首页 > 其他分享 >Bash脚本当中获取当前脚本绝对路径位置

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

时间:2024-11-01 20:32:10浏览次数:1  
标签:脚本 script 绝对路径 sh 相对路径 目录 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 可以获得脚本文件的所在目录,以构建一个可靠的绝对路径。

标签:脚本,script,绝对路径,sh,相对路径,目录,Bash
From: https://www.cnblogs.com/smartljy/p/18521215

相关文章

  • shell脚本之awk的使用
    步骤一:awk的基本用法基本操作方法格式1:awk[选项]'[条件]{指令}'文件格式2:前置指令|awk[选项]'[条件]{指令}'其中print是最常用的编辑指令;若有多条编辑指令,可用分号分隔。Awk过滤数据时支持仅打印某一列,如第2列、第5列等。处理文本时,默认将空格、制表符作为分隔符。......
  • 2025AI插件脚本大合集V6.0最新中文版本!209+效率功能支持Illustrator 2025-CS6 Win/Mac
    AI插件脚本大合集V6.0是专为AdobeIllustrator设计的一套强大工具集,旨在提高设计师的工作效率。它支持从Illustrator2025至CS6的多个版本,并兼容Windows和Mac操作系统。以下是该插件脚本大合集中的一些常用功能,它们可以帮助设计师在各种设计任务中节省时间并提高质量。标注......
  • https脚本python和bash版本
    以下是一个使用 `curl` 的 Bash 脚本,可以发送 HTTPS 的 GET 和 POST 请求,同时支持 cookies 和gzip 压缩: ```bash#!/bin/bash # 默认配置COOKIE_FILE="cookies.txt" # 存储cookies的文件USER_AGENT="Mozilla/5.0(X11;Ubuntu;Linuxx86_64)AppleWe......
  • Golang 开源库分享:anko - 给 Go 加点“脚本魔法”
    GitHub仓库链接:https://github.com/mattn/anko1.anko是干嘛用的?anko是一个可以让Go项目支持脚本语言的小工具。换句话说,就是我们可以给Go项目加点“脚本魔法”,在程序跑起来之后还能动态地改代码逻辑。比如,你在写一个应用,想让用户可以随时调整设置或控制程序的某些行为,而......
  • 基于 LLM 的小众脚本语言(某仿真软件 DSL)生成方案
    某仿真软件现状新建仿真项目后,工程中的模型只能依靠编辑其自带的脚本语言来进行增删改,业务人员的学习成本极高。网上的资料也很少,Github上都只能找到一个该软件的项目代码。文档也基本只有该软件自带的文档,社区基本没有,好在文档写的比较详实。目前打算去尝试的解决方案基于Co......
  • ingress controller openresty lua脚本的开发
    接上篇博客:https://blog.csdn.net/weixin_34542632/article/details/143405219?spm=1001.2014.3001.5501,我们接下来一起看一下ingress网关的lua脚本开发。一些基础信息:ingresscontroller其实就是openresty,官方话术:ThismoduleisacorecomponentofOpenResty.Ifyouar......
  • Python 常用的 50 个提效小脚本
    Python常用的50个提效小脚本原创 huaan9527 测试开发学习交流 2024年09月28日11:22 浙江文件和目录管理批量重命名文件   importosforfilenameinos.listdir('.'):os.rename(filename,filename.replace('old','new'))查找大文件  ......
  • ssh分发密钥脚本
    使用场景->ansible#!/bin/bash#author:kylerock#desc:#1.一键创建秘钥对(如果不存在)#2.一键分发公钥#3.一键检查#1.varskey=/root/.ssh/id_rsaips="73141"pass=1#ips="`cat/server/files/ip.txt`"#2.一键创建秘钥对if[!-f$key];thenssh-k......
  • IDEA 利用groovy脚本生成注释
     介绍 本文主要介绍利用IDEA编辑器的活动模板,结合groovy脚本,生成注释模板。目前生成的注释主要适用于java和js文件推荐此方式,可以根据需要定义groovy脚本,生成不同格式的注释操作点击File>>Setting 找到Edtor>>LiveTemolates,建议创建一个模板组java_of......
  • 用python脚本检测笑脸漏洞
    漏洞原理VSFTPD(VerySecureFTPDaemon)是一个常用的FTP服务器软件。“vsftpd2.3.4Backdoor”(也称为“vsFTPd2.3.4Backdoor”或“vsftpdv2.3.4backdoor”)。该漏洞最初于2011年被公开发现,影响了VSFTPD2.3.4版本。这个版本中的一个后门(backdoor)允许攻击者通过一个特殊......