`
alanland
  • 浏览: 642540 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

bash shell 获取当前正在执行脚本的绝对路径

阅读更多

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

  常见的一种误区,是使用 pwd 命 令,该命令的作用是“print name of current/working directory”,这才是此命令的真实含义,当前的工作目录,这里没有任何意思说明,这个目录就是脚本存放的目录。所以,这是不对的。你可以试 试 bash shell/a.sh,a.sh 内容是 pwd,你会发现,显示的是执行命令的路径 /home/june,并不是 a.sh 所在路径:/home/june/shell/a.sh

 

  另一个误人子弟的答案,是 $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的那个文件的名字(没说是绝对路径)

下面对比下正确答案:

01 june@Win7 192.168.1.100 07:43:43 ~ >
02 cat shell/a.sh
03 #!/bin/bash
04 echo '$0: '$0
05 echo "pwd: "`pwd`
06 echo "scriptPath1: "$(cd `dirname $0`; pwd)
07 echo "scriptPath2: "$(dirname $(readlink -f $0))
08 june@Win7 192.168.1.100 07:43:46 ~ >
09 pwd
10 /home/june
11 june@Win7 192.168.1.100 07:43:48 ~ >
12 bash shell/a.sh
13 $0: shell/a.sh
14 pwd: /home/june
15 scriptPath1: /home/june/shell
16 scriptPath2: /home/june/shell
17 june@Win7 192.168.1.100 07:43:54 ~ >

 

在此解释下 scriptPath1 :

 

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

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

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

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

分享到:
评论

相关推荐

    Shell中获取脚本所在目录绝对路径的方法

    在Shell脚本编程中,有时我们需要知道当前正在执行的脚本文件所在的绝对路径。这在处理相对路径依赖性时特别有用,例如当脚本需要访问同一目录下的其他文件或子目录时。在本篇文章中,我们将详细介绍如何在Shell脚本...

    learning the bash shell

    二、Shell脚本 Bash Shell不仅用于交互式操作,更常用于编写脚本,实现自动化任务。一个简单的Bash脚本通常以`#!/bin/bash`开头,声明解释器。脚本中可以包含变量定义、条件语句(if-else)、循环结构(for、while)...

    高级bash shell脚本

    **高级Bash Shell脚本** Bash Shell脚本是一种强大的工具,用于自动化Linux和Unix系统中的任务。它允许用户通过编写一系列命令来执行复杂的任务,而无需深入了解编程语言的复杂性。这份“高级Bash-Scripting Guide...

    Advanced Bash Shell Guide

    学习这份"Advanced Bash Shell Guide",您将能够熟练地编写复杂的Shell脚本,解决日常任务,甚至构建复杂的自动化系统。在Unix和Linux环境中,Bash Shell技能是一项基础且不可或缺的工具,对于任何IT从业者而言都...

    Learning the bash Shell

    总的来说,通过学习《Learning the Bash Shell》,读者将能够熟练掌握Bash shell的各个方面,无论是日常的命令行操作,还是编写复杂的shell脚本,都能游刃有余。这不仅可以提升Linux系统的使用效率,还能为成为一名...

    linux获取shell脚本所在绝对路径操作介绍.docx

    在Linux系统中,编写Shell脚本时,有时我们需要获取当前执行的脚本的绝对路径,以便于进行一些路径相关的操作,比如引用同目录下的其他文件或执行其他脚本。本篇文档将详细介绍如何在Shell脚本中获取脚本的绝对路径...

    linux bash shell中文手册

    9. **注释 (COMMENTS)**:解释如何在Shell脚本中添加注释,通常是以`#`字符开始的行。 10. **引用 (QOUTING)**:描述如何包围文本以防止特殊字符的解释,例如单引号`'`、双引号`"`和反引号`` ` ``。 11. **参数 ...

    Bash shell编程参考手册

    它不仅是一个命令解释器,还支持各种脚本语言特性,如变量赋值、条件语句、循环结构等,使用户能够编写复杂的shell脚本。 #### 2. **基本Shell特性** Bash shell提供了丰富的语法和操作,包括: - **Shell语法**...

    bash_shell笔记_1_脚本基础知识

    Shell脚本是一系列命令的集合,它们按照特定顺序执行。创建和运行Shell脚本的基本步骤包括: 1. **编写脚本:** 使用文本编辑器如vim、nano等来编写脚本内容。 2. **指定解释器:** 在脚本的第一行指定解释器路径,...

    Bash shell脚本新手指南

    - Shell脚本是解释型而非编译型的,这意味着脚本中的每一行都会被逐行解释执行,而不是先编译成机器码。 - **Shell 主要任务:** - 提供一个可配置的用户环境,允许用户通过配置文件自定义Shell的行为。 **1.1.1...

    Excel 调用Shell命令执行bash脚本和命令行代码-VBA源码.rar

    同时,VBA代码中要确保脚本路径是相对于VBA宏所在的目录,或者是绝对路径。 通过这种方式,Excel VBA不仅可以运行简单的系统命令,还可以执行复杂的Bash脚本,实现诸如文件操作、系统监控、网络通信等各种功能。这...

    bash shell高级编程

    10. **Shell脚本**:编写包含多条命令的文本文件,以`.sh`为扩展名,通过`chmod +x script.sh`赋予执行权限后,使用`./script.sh`运行。 11. **正则表达式**:在`[[ ... ]]`双括号内支持扩展的正则匹配,如`[[ ...

    shell执行mysql脚本

    以下将详细介绍如何在shell脚本中执行MySQL脚本并传递参数。 首先,我们需要创建一个shell脚本,通常以`.sh`为扩展名。这个脚本会包含执行MySQL命令的逻辑。在shell脚本中,我们可以使用`mysql`命令行客户端来连接...

    Linux Bash Shell快速入门

    /bin/bash的作用,它是告诉系统这个脚本需要通过Bash Shell来执行。脚本中可以包含注释,Bash中注释是通过在行首添加井号(#)来实现的,而井号后面紧跟的是程序员添加的说明文字。Echo命令用于输出字符串到标准输出,...

    人性化解析shell脚本,保证快速入门sh,bash,shell入门.pdf

    "人性化解析shell脚本,快速入门sh、bash、shell入门" Shell脚本是Linux操作系统中的一种编程语言,用于自动化系统管理和任务执行。本文档旨在快速入门Shell脚本,帮助读者快速掌握Shell脚本的基本知识和使用方法...

    Linux CentOS下shell显示-bash-4.1$不显示用户名路径.docx

    在 CentOS 下新增一个用户,登录进去之后 shell 脚本的信息如下:bash-4.1$,而不是我们经常看到的 username@hostname 的组合,看起来很不舒服。 解决方案 问题的原因是因为没有配置 .bash_profile 的问题,可以...

    Linux(shell/bash)的脚本教程

    #### 创建与执行Shell脚本 在Linux环境中,存在多种Shell,如Bash、Korn Shell、C Shell等,其中Bash由于其易用性和广泛的支持而成为首选。创建Bash脚本的基本步骤如下: 1. **创建脚本文件**:使用文本编辑器(如...

    bash/shell教程chm版

    **二、Bash Shell脚本** 1. **脚本结构**: Bash脚本以`#!/bin/bash`作为首行,声明脚本使用的Shell类型。接着是可执行的命令和控制结构。 2. **变量**: 在Bash中,可以定义和操作变量,如`name="John"`,并用`echo...

    详解shell 遍历文件夹内所有文件并打印绝对路径

    ### 详解Shell脚本遍历文件夹内所有文件并打印绝对路径 #### 一、引言 在Linux或Unix环境中,Shell脚本是一种强大的工具,能够帮助用户执行一系列任务,如文件管理、进程控制等。其中,遍历文件夹内的所有文件并...

Global site tag (gtag.js) - Google Analytics