Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何获取当前正在执行脚本的绝对路径

如何获取当前正在执行脚本的绝对路径

作者头像
小汪Waud
发布于 2023-02-03 06:58:52
发布于 2023-02-03 06:58:52
1.8K00
代码可运行
举报
文章被收录于专栏:小汪Waud小汪Waud
运行总次数:0
代码可运行

dirname $0

最近在看脚本的时候经常发现有“dirname $0”这样一种表述,很是不解。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# get path to scripts
scripts_dir=`dirname $0` 

刚开始我还以为需要把dirname改成对应的路径,同时又不解$0在这里是表达什么含义。

如图所示,dirname $0是不能在命令行下单独执行的。

举个例子,我用mkdir -p创建一系列文件夹

mkdir -p 1/2/3/4/5/6

然后写一个小脚本 test.sh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
cd `dirname $0`
echo `pwd`

切到/home/zwang/1/2/3/4路径下,运行test.sh后就位于脚本所在的目录并输出路径了。

现在我们回头来把这个脚本拆开来理解一下

  • `` 表示执行引号内的命令
  • $0 表示当前执行脚本的文件名
  • dirname $0 表示获取当前执行脚本的路径

这样一来就能明白dirname $0是如何获取当前执行脚本的路径了吧?

$( ) 和 ``

在这里需要补充$( ) 和 ``的不同。

二者都是返回括号中命令的结果,是用来作命令替换的,即先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。

但需要注意两点:

  1. 在多层次的复合替换中,``必须要额外的跳脱处理(反斜线)
  2. 不是所有的类unix系统都支持$( ),但反引号是肯定支持的

举个栗子~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
basepath=$(cd `dirname $0`; pwd)
echo $basepath

此时输出的结果是脚本所在路径,但如果我换一种命令替换的方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
basepath=`cd `dirname $0`; pwd`
echo $basepath

出现了报错,这就需要按我上面提到的在多层次的复合替换中,``必须要额外的跳脱处理(反斜线),如果我按以下代码加上反斜线即可正常输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
basepath=`cd \`dirname $0\`; pwd`
echo $basepath

参考资料:

  1. https://blog.csdn.net/jackyechina/article/details/52813007
  2. http://sexywp.com/bash-how-to-get-the-basepath-of-current-running-script.htm
  3. https://blog.csdn.net/weixin_37766087/article/details/99974385
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小汪Waud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
详解shell脚本的环境、普通、特殊变量
#变量介绍 变量就是用一个固定的字代替复杂的内容,该内容里可能还会包含变量、路径、字符串等其它的内容。
老油条IT记
2020/09/04
1.8K0
详解shell脚本的环境、普通、特殊变量
常用shell命令归纳总结
ls -F 列出当前目录下的文件名及其类型。以/ 结尾表示为目录名,以* 结尾表示为可执行文件,以@ 结尾表示为符号连接。
全栈程序员站长
2022/07/19
6120
常用shell命令归纳总结
shell-编写shell脚本所需的基础语法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
洋仔聊编程
2019/09/18
9190
shell-编写shell脚本所需的基础语法
shell技巧分享(四)
20 Apr 2018 shell技巧分享(四) 这是一个系列文章,主要分享shell(部分功能仅适用于bash)的使用建议和技巧,每次分享3点,希望你能有所收获。 1 常用快捷键 Alt+Backspace:删除光标前的一个单词 Alt+F:移动光标到下一个空格处 Alt+B:移动光标到上一个空格后第一个字符处 Ctrl+R:搜索执行过的命令行 Ctrl+U:删除光标之前所有字符 Ctrl+K:删除光标之后的所有字符 Ctrl+A:移动光标到行首 Ctrl
俊采
2018/05/15
7460
xsync集群分发脚本的改良[通俗易懂]
不好用的分发脚本,缺点:不能同时传多个文件,集群规模需要手动调整,某些变量不是完全解耦
全栈程序员站长
2022/09/05
5440
Shell系列-编写及执行脚本
一、第一个Shell脚本 1.什么是shell脚本? 提前写好可执行的语句,能够完成特定任务的文件(顺序执行,批量化处理;解释型程序) 2.shell版HelloWorld的诞生 脚本创建”三
行 者
2018/03/26
8270
Shell系列-编写及执行脚本
Shell变量
定义变量的基本格式为"变量名=变量值",注意等号两边没有空格,在变量名称前面添加美元符号"$",可以引用一个变量的值,使用echo命令可以查看变量。
羊羽shine
2019/05/29
7400
如何编写一个shell脚本
本文结合大量实例阐述如何编写一个shell脚本。  为什么要进行shell编程  在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。  下面,让我们一起来看看shell是如何工作的:  建立一个脚本  Linux中有好多中不同的shell,但是通常我们使用bash (bou
阳光岛主
2019/02/20
1.7K0
oceanbase源码分析 build.sh --init 执行过程
OceanBase是由蚂蚁集团、阿里巴巴完全自主研发的分布式关系型数据库,始创于2010年。
早起的鸟儿有虫吃
2025/01/12
1000
写好Shell脚本那些不得不知道的细节
想写好Shell脚本,有很多细节不得不知道,细节的不注意会给脚本调试带来很多麻烦,甚至导致运行的结果天差地别,下面总结了我实际工作中遇到的18大细节,分享给大家。
Lu说
2022/06/07
1.9K0
写好Shell脚本那些不得不知道的细节
Shell 基础语法
本文只是对 shell 脚本语言中一些常用的基础语法进行汇总整理,如果你真的想系统的学习 shell 脚本编程,这里推荐两本电子读物:
Ryoma
2022/04/02
1.1K0
Shell 基础语法
Linux:编写 Shell 脚本时如何优雅地处理函数返回状态,多行文本和脚本路径
在 Linux 环境下编写 Shell 脚本时,能够灵活处理函数的返回状态以及获取脚本的实际路径是非常有用的技能。本文将详细介绍如何让函数返回执行状态而不是退出脚本,并推荐使用的获取脚本所在位置的方法。
运维开发王义杰
2024/06/11
1730
Linux:编写 Shell 脚本时如何优雅地处理函数返回状态,多行文本和脚本路径
bash shell:获取当前脚本的绝对路径(pwd/readlink)
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/51906821
10km
2019/05/25
8.9K0
重定向、别名、绝对路径、相对路径 详解
惨绿少年
2017/12/28
1.5K0
Shell 获取当前脚本的绝对路径
请注意:本文编写于 2020-04-26,其中某些信息可能已经失去时效性。 1. dirname + pwd root_absolute_dir=$(cd "$(dirname "$0")";pwd) 2. readlink root_absolute_dir=$(dirname $(readlink -f "$0")) 注意 macOS 中使用 readlink -f 命令会有如下报错: readlink: illegal option -- f usage: readlink [-n] [file
Ryoma
2022/04/02
1.4K0
Shell脚本学习1
Unix/Linux上常见的Shell脚本解释器有bash、sh、csh、ksh等,习惯上把它们称作一种Shell
用户9645905
2023/10/17
3480
高效的Shell编程建议及入坑
描述:在进行shell脚本语言编写的时候,不仅要注意写的功能,更要注意他的美观以及通用性,还需要让其他参与运维的人都能看懂;
全栈工程师修炼指南
2022/09/28
9060
高效的Shell编程建议及入坑
shell 当前工作目录的绝对路径
问题就出在最后那句,本意我是希望把/home/lcd/something 复制到我脚本的执行目录。 假设我的脚本目录在/home/lcd/shell/下,
orientlu
2018/09/13
3K0
SHELL(bash)脚本编程三:重定向
在这一篇中,我们介绍了一点关于输入输出重定向和管道的基础知识,本篇将继续重定向的话题。 在开始前,先说一说shell中的引用。
用户5030870
2019/04/11
1.7K0
小白Linux入门--入门篇(二):Linux中特殊符号./~><;的作用详解
开头先给大家介绍两个实用又常用的Linux命令,可以让你在实用Linux过程中更加方便!
浩Coding
2019/07/02
27.6K0
小白Linux入门--入门篇(二):Linux中特殊符号./~><;的作用详解
相关推荐
详解shell脚本的环境、普通、特殊变量
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验