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

1. pwd命令

我们看看使用pwd命令能否获取当前正在执行脚本的绝对路径。该命令的作用是“print name of current/working directory”,真实含义是当前工作目录,并不是正在执行脚本的目录。

xiaosi@Qunar:~/company/sh$ cat pwd.sh
echo `pwd`
xiaosi@Qunar:~/company/sh$ sh pwd.sh
/home/xiaosi/company/sh
xiaosi@Qunar:~/company/sh$ cd ..
xiaosi@Qunar:~/company$ sh sh/pwd.sh
/home/xiaosi/company

pwd.sh脚本中只有一句:echo `pwd`。通过在不同路径下运行脚本,sh pwd.sh得到/home/xiaosi/company/sh,然而sh sh/pwd.sh 得到/home/xiaosi/company,所以说pwd命令并不能得到正在执行脚本的目录。

2. $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值与调用的方式有关:

(1)使用一个文件调用bash,那$0的值是文件的名字

xiaosi@Qunar:~/company/sh$ cat pwd.sh
echo $0
xiaosi@Qunar:~/company/sh$ sh pwd.sh
pwd.sh

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

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

3. 正解

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

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

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

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

到此这篇关于Shell获取当前正在执行脚本的绝对路径的文章就介绍到这了,更多相关Shell获取脚本绝对路径内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

    要得到正在执行的程序/脚本自身所存放的绝对路径,在 PHP 里面可以用 dirname(realpath(__FILE__)) : C# 则有 System.Windows.Forms.Application.StartupPath : java 似乎没有什么比较直接的方法,只能利用 CodeSource 来间接获取 .而在 linux shell 脚本里面如果想得到当前脚本文件存放的绝对路径,也没有太现成的命令可以调用,不过可以通过下面的语句来获取: 复制代码 代码如下: baseDirFor

  • Shell获取当前正在执行脚本的绝对路径

    1. pwd命令 我们看看使用pwd命令能否获取当前正在执行脚本的绝对路径.该命令的作用是"print name of current/working directory",真实含义是当前工作目录,并不是正在执行脚本的目录. xiaosi@Qunar:~/company/sh$ cat pwd.sh echo `pwd` xiaosi@Qunar:~/company/sh$ sh pwd.sh /home/xiaosi/company/sh xiaosi@Qunar:~/compan

  • shell之定时周期性执行脚本的方法示例

    示例 1.编写测试脚本脚本 time .sh $ cat time.sh #! /bin/bash echo $(date +%s) >> /home/ocean/out.txt 保存完毕后记得给予权限 chmod 777 test.sh 2.添加定时任务 $ crontab -e no crontab for ocean - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/n

  • Shell中实现“多线程”执行脚本文件完美解决方案

    即比如我有100个可执行文件,互相间没有特别的先后执行关系,如CODE: 复制代码 代码如下: job_1 job_2 job_2 ..... job_100 想用csh/bash来多线程调用执行. 比如一次开5个线程,那么job_1,2,3,4,5一起先开始,那么其中任何一个线程如果先执行完成,则继续执行下一个没有初执行过的文件,如job_6,7,8....,这样一直以所指定的线程数来执行所有100个文件. 我本来想用 "&" 来放入后台,可是这样我一次可以指定5放入后台,但

  • Shell获取路径操作(dirname $0 pwd)的实现

    目录 pwd用法 pwd: pwd-L: pwd-P: basename用法 basename: basename-s: basename-a: dirname用法 dirname: dirname-z:   在shell脚本中经常会看到$(cd $(dirname $0); pwd).basename等操作,本文就来记录一下 dirname.basename.pwd 的用法及组合使用. pwd 用法 pwd: pwd [-LP]Print the name of the current wor

  • python执行shell获取硬件参数写入mysql的方法

    本文实例讲述了python执行shell获取硬件参数写入mysql的方法.分享给大家供大家参考.具体分析如下: 最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python执行shell获取这些信息,python执行shell脚本有以下三种方法: 1. os.system() 复制代码 代码如下: os.system('ls') #返回结果0或者1,不能得到

  • bash shell获取当前脚本的绝对路径(pwd/readlink)

    有时候,我们需要知道当前执行的输出shell脚本的所在绝对路径,可以用dirname实现.我们知道 dirname 可以获取一个文件所在的路径,dirname的用处是: 输出已经去除了尾部的”/”字符部分的名称:如果名称中不包含”/”,则显示”.”(表示当前目录). 下面是dirname的命令行说明: 从上面的描述可知道,直接从dirname返回的未必是绝对路径,取决于提供给dirname的参数是否是绝对路径.所以下面这样的代码中SHELL_FOLDER中不一定是绝对路径 SHELL_FOLDE

  • Linux下使用shell脚本自动执行脚本文件

    以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 文件内容: #将tomcat中的应用wfjb_web 复制到 /usr/local/wfjb_web_back/tomcat_back/目录下 并按照日期作为文件名称 cp -af /usr/local/apache-tomcat-7.0.73/webapps/wfjb_web /usr/local/wfjb_web_back

  • 详解shell中source、sh、bash、./执行脚本的区别

    1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限" 注:该命令通常用命令"."来替代. 如:source .bash_profile . .bash_profile两者等效. source(或点)命令通常用于重新执行刚修改的初始化文档. source命令(从 C Shell 而来)是bash shell的内置命令. 点命令,就是个点符号,(从Bourne

  • 在linux shell脚本中root切换到普通用户执行脚本或命令的方法

    需求: 安装deb包,设置程序安装后启动,不需要root权限启动程序 | 不能用root权限启动 其他开机启动选项 方法:root临时降低权限 secUser=`who am i | awk '{print $1}'` #echo $secUser su $secUser -c <指令> > /dev/null 2>&1 & #这一条命令的执行权限是临时的,只在本条语句起作用 id -u # 结果为0,还是root用户权限 附: su --help -c, --co

  • Shell执行脚本并输出日志文件的方法

    shell 错误输出重定向到标准输出 ./tmp/test.sh > /tmp/test.log 2>&1 >和<是文件重定向符.那么1和2是什么? shell中每个进程都和三个系统文件相关联标准输入stdin标准输出stdout标准错误stderr三个系统文件的文件描述符分别为0,1和2.所以这里2>&1的意思就是将标准错误也输出到标准输出当中. 下面通过一个例子来展示2>&1有什么作用: $ cat test.sh t date test.s

随机推荐