zoukankan      html  css  js  c++  java
  • [转]如何取得当前正在执行的shell脚本的绝对路径?

    来源:http://sexywp.com/bash-how-to-get-the-basepath-of-current-running-script.htm

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

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

    此外还有一种方法:

    #!/bin/bash
    path=$(cd `dirname $0`; pwd)
    echo $path

    常见的一种误区,是使用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  is invoked with a file of commands, $0 is set to the name of that file. If  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 , as given by argument zero.

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

    1. 使用一个文件调用bash,那$0的值,是那个文件的名字(没说是绝对路径噢)
    2. 使用-c选项启动bash的话,真正执行的命令会从一个字符串中读取,字符串后面如果还有别的参数的话,使用从$0开始的特殊变量引用(跟路径无关了)
    3. 除此以外,$0会被设置成调用bash的那个文件的名字(没说是绝对路径)

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

    • dirname $0,取得当前执行的脚本文件的父目录
    • cd dirname $0,进入这个目录(切换当前工作目录)
    • pwd,显示当前工作目录(cd执行后的)

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

  • 相关阅读:
    ACM题集以及各种总结大全
    ACM题集以及各种总结大全
    线段树题集
    线段树题集
    POJ 1159 Palindrome【LCS+滚动数组】【水题】
    POJ 1159 Palindrome【LCS+滚动数组】【水题】
    开课博客
    第一周学习进度
    开学测试
    寒假总结
  • 原文地址:https://www.cnblogs.com/straycats/p/9882110.html
Copyright © 2011-2022 走看看