文档章节

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

bobway
 bobway
发布于 2015/12/08 14:45
字数 608
阅读 42
收藏 5
点赞 0
评论 0

如题,一般我们写Shell脚本的时候,都倾向使用绝对路径,这样无论脚本在什么目录执行,都应该起到相同的效果,但是有些时候,我们设计一个软件包中的工具脚本,可能使用相对路径更加灵活一点,因为你不知道用户会在哪个目录执行你的程序,就有了本文的题目。

   当然,更简单的办法,是给一个配置文件,要使用,必须先配置,告知脚本自己所在的根目录。

   此外还有一种方法:

  • #!/bin/bash

  • basepath=$(cd `dirname $0`; pwd)

  • echo $basepath

   常见的一种误区,是使用pwd命令,该命令的作用是“print name of current/working directory”,这才是此命令的真实含义,当前的工作目录,这里没有任何意思说明,这个目录就是脚本存放的目录。所以,这是不对的。

   另一个误人子弟的答案,是$0,这个也是不对的,这个$0是Bash环境下的特殊变量,其真实含义是:

   Expands to the name of the shell or shell script. This is set at shell initialization.  If bash is invoked with a file of commands, $0 is set to the name of that file. If bash is started with the -c option, then $0 is set to the first argument after the string to be executed, if one is present. Otherwise, it is set to the file name used to invoke bash, as given by argument zero.

   这个$0有可能是好几种值,跟调用的方式有关系:

  • 使用一个文件调用bash,那$0的值,是那个文件的名字(没说是绝对路径噢)

  • 使用-c选项启动bash的话,真正执行的命令会从一个字符串中读取,字符串后面如果还有别的参数的话,使用从$0开始的特殊变量引用(跟路径无关了)

  • 除此以外,$0会被设置成调用bash的那个文件的名字(没说是绝对路径)

  •    很靠近了,但是还是不对,最后,我们说一下上面的脚本是什么意思,从里往外看:

  • dirname $0,取得当前执行的脚本文件的父目录

  • cd `dirname $0`,进入这个目录(切换当前工作目录)

  • pwd,显示当前工作目录(cd执行后的)

  •    由此,我们获得了当前正在执行的脚本的存放路径。


本文转载自:http://blogread.cn/it/article/6549?f=wb

共有 人打赏支持
bobway
粉丝 3
博文 99
码字总数 22399
作品 0
成都
bash shell 获取当前正在执行脚本的绝对路径

如题,一般我们写Shell脚本的时候,都倾向使用绝对路径,这样无论脚本在什么目录执行,都应该起到相同的效果,但是有些时候,我们设计一个软件包中的工具脚本,可能使用相对路径更加灵活一点...

大数据之路
2013/08/07
0
3
shell获取当前工作目录绝对路径

一般我们写Shell脚本的时候,都倾向使用绝对路径,这样无论脚本在什么目录执行,都应该起到相同的效果,但是有些时候,我们设计一个软件包中的工具脚本或者远程调用某个脚本时,可能使用相对...

yzbty23
2015/10/14
452
0
笑谈区别之--执行Shell脚本的四种方法

执行shell脚本方式: 法一、绝对路径方式: 法二、相对路径方式: 法三、bash命令调用: 法四、". 2.sh"点空格相对路径 或者"./root/2.sh"点空格绝对路径方式: 说下几种方式的区别: 第一种和...

脑洞老湿_
01/29
0
0
新手Mac、Linux之脚本运行原理讲解

有很多人拿到一个脚本不知道如何运行,在这我就讲解一下关于脚本的基本知识。 先说一下一个比较规范的脚本应该是什么样子: 这是一个shell脚本。先不说这个脚本是干嘛用的什么功能,只说一下...

doctordc
05/23
0
0
手把手教你crontab排障

crontab 配置文件 SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/ .—————- minute (0 – 59) | .————- hour (0 – 23) | | .———- day of month (1 – 31......

linuxprobe
2016/09/14
16
0
在windows 10 bash里编写脚本

在windows 10 bash里编写脚本 参照:https://www.howtoip.com/how-to-create-and-run-bash-shell-scripts-on-windows-10/ 例子由自己在windows pro build 15063 linux 子系统里测试完成 如何......

cysky
06/28
0
0
初步shell脚本编程

编程是使用人类自然语言或机器语言进行程序源代码书写的过程。这是我们都知道的,因为毕竟IT,都编程过什么学生成绩管理系统,图书馆管理系统。等等。。。 编程为了能够让用户在使用计算机的...

刘景宇
2017/11/17
0
0
shell变量定义

shell变量定义 一,变量: 可变化的量,有名称的内存空间(在内存中要占据空间) 声明变量的目的是:让计算机留出内存空间来储存某一个确定类型的数据 二,bash中变量的类型 (1)环境变量:对当前...

余二五
2017/11/23
0
0
小蚂蚁学习Linux(9)——shell基础了解和bash基本功能

shell简单了解 查看当前的shell echo $SHELL 尝试第一个小脚本: vim test.sh 1 #!/bin/bash 2 echo 'i will be back'; 注意: #!/bin/bash 这一句是一定要加的,切记。 执行脚本方式: 1. 赋...

嗜学如命的小蚂蚁
2015/11/04
0
0
Shell编程基础

说到编程,我们大家都不会陌生,但是在Linux中,我们主要做的是脚本的编写。当然了,想要了解Linux的脚本编写,我们得先来说说多命令执行的逻辑关系。 1.命令替换 COMMAND1 $(COMMAND2) 2.管...

long44
2017/11/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
10分钟前
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
21分钟前
0
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
31分钟前
0
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
40分钟前
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
49分钟前
0
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
49分钟前
0
0
TensorFlow,从一个 Android Demo 开始

TensorFlow Android Demo 项目地址 Machine Learning 既然提到了 TensorFlow,那是不是得神经网络、机器学习了解下? 如果你能坚持把 机器学习速成课程 给啃完了,觉得还挺有兴趣的,那可以考...

孟飞阳
51分钟前
0
0
JVM学习笔记二:内存结构规范

1、JVM基本结构图 2、java堆(Heap) 3、方法区(Method Area) 4、程序计数器 5、JAVA栈图解 局部变量表:八大基本类型,还可以存储引用类型 上一篇:JVM学习笔记一:类加载机制介绍...

刘祖鹏
56分钟前
0
0
mui集成微信H5支付(返回白屏问题已经解决)

一.项目需求 因为公司人员缺少,没有专门开发安卓和ios的人员,为了项目尽早上线采用了混合APP开发的方式,我选择了MUI混合开发框架,项目中需要在用户购买VIP会员的时候进行支付,所以需要在项目...

银装素裹
今天
1
0
SpringBoot集成Redis--配置自定义的RedisCacheManager

配置自定义的RedisCacheManager--1自定义键生成规则 默认的键生成器 当不指定缓存的key时,SpringBoot会使用SimpleKeyGenerator生成key。 SimpleKeyGenerator SimpleKey 查看源码可以发现,它...

karma123
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部