调用shell脚本时,获取脚本的当前目录

写shell脚本,一般需要把脚本的当前目录作为工作目录,如何获取当前脚本的目录呢?
在执行脚本中如何取得脚本所在的目录,分两种情况:

  1. 如果脚本当前路径下执行脚本,那么直接pwd取得绝对路径
  2. 而如果是从其他目录来调用脚本的情况,需要先cd到脚本所在目录,再取得脚本所在的绝对路径
    提供一下两种方法:
    第一种稍微繁琐:
    getCurPath()
    {
    if [ "` dirname "$0" `" = "" ] || [ "` dirname "$0" `" = "." ] ; then
        CURRENT_PATH="`pwd`"
    else
        cd ` dirname "$0" `
        CURRENT_PATH="`pwd`"
        cd - > /dev/null 2>&1 #返回到上次目录
    fi
    }

    第二种更简洁:
    if [ `echo $0 | grep -c "/"` -gt 0 ];then
    cd ${0%/*}
    fi

CURRENT_DIR="$(pwd)"


推荐第二种写法

原文地址:https://blog.51cto.com/13560219/2444574

时间: 2024-10-11 01:17:12

调用shell脚本时,获取脚本的当前目录的相关文章

[蟒蛇菜谱] Python调用shell命令,获取返回值和返回信息

# -*- coding: utf-8 -*- import os import subprocess import signal class MockLogger(object): '''模拟日志类.方便单元测试.''' def __init__(self): self.info = self.error = self.critical = self.debug def debug(self, msg): print "__LOGGER__:"+msg class Shell(obj

jenkins:执行远程shell脚本时,脚本没有生效

问题: jenkins远程部署一台机器时,jenkins构建显示成功,但是查看服务日志却没有真正执行的sh run.sh脚本,导致服务并没有启动 解决: 只需要在命令最上方加上source /etc/profile就可以了 参考:https://blog.csdn.net/y6300023290/article/details/86246463 原文地址:https://www.cnblogs.com/gcgc/p/10823775.html

QTP录制脚本时,脚本内容为空的解决办法

在网上百度了一下,大多说的是以下方法: 打开IE,在菜单中选择[工具]/[Internet选项]进入Internet配置界面.选择[程序]/[管理加载项],查看目前加载的ActiveX的情况.当看到存在BHOManager Class并且其状态是"禁用"时,点击"启用"开启这个功能,并保存后退出即可解决问题. 当在管理加载项里找不到BHOManger Class这个加载项时,如果你安装了QTP,那么在C:\WINDOWS\system32下会存在一个叫BHOMana

对于shell脚本参数获取时的一点小技巧

问题如下: 根据脚本参数的个数$#进行一个循环,在依次输出每个参数$1 $2 $3...... 我有一个循环变量i $i 取到这时的i为1,我想使用这个1再去调用$1,也是就是打印出第一个参数 就是$($i)的意思来取到第几个参数,当然$($i)是不好用的 当时纠结了好久,最后上百度提问,两位高手给出了答案: 1) #!/bin/sh NUMBER=$# echo $NUMBER i=1 while [ $i -le $NUMBER ] do a[$i]=$1 #将数组a[i]赋值为$1,即取得

Java实践-远程调用Shell脚本并获取输出信息

1.添加依赖 <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>262</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId&g

Java调用Shell命令和脚本

1.介绍 有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本.而Runtime.getRuntime().exec()方法给我们提供了这个功能,而且Runtime.getRuntime()给我们提供了以下几种exec()方法: Process exec(String command) 在单独的进程中执行指定的字符串命令. Process exec(String[] cmdarray) 在单独的进程中执行指定命令和变量. Process exec(String[] cmd

JAVA调用Shell脚本

在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell.先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本. JAVA调用很简单,例子如下: 首先是shell脚本 [plain] view plain copy print? #!/bin/sh echo Begin word cluster /home/felven/word2vec/word2vec -train /ho

[Shell]crontab 执行任务调用shell脚本,相对路径无法找到

问题出现的场景大概就是 1  cron调用一个python脚本 2  python脚本中调用一个shell脚本(对日志分析)获取shell输出然后发送邮件 类似一个监控任务. 直接执行python脚本没有问题,但是写在cron中之后,shell脚本中的相对路径就找不到了,总是提示无法找到某些文件 后来解决的问题就是使用log文件的绝对路径,运行就正常了. google了一些,发现很多人也遇到过类似的问题,可能和cron的机制有关系. 大部分人的问题都是因为环境变量造成的,因为cron是一个独立进

[Shell]crontab 运行任务调用shell脚本,相对路径无法找到

问题出现的场景大概就是 1  cron调用一个python脚本 2  python脚本中调用一个shell脚本(对日志分析)获取shell输出然后发送邮件 类似一个监控任务. 直接运行python脚本没有问题,可是写在cron中之后.shell脚本中的相对路径就找不到了,总是提示无法找到某些文件 后来解决的问题就是使用log文件的绝对路径,执行就正常了. google了一些,发现非常多人也遇到过类似的问题,可能和cron的机制有关系. 大部分人的问题都是由于环境变量造成的.由于cron是一个独立

java调用shell命令及脚本

shell脚本在处理文本及管理操作系统时强大且简单,将shell脚本结合到应用程序中则是一种快速实现的不错途径本文介绍使用java代码调用并执行shell 我在 -/bin/ 目录下写了jbossLogDelivery.sh,有两个功能{./jbossLogDelivery.sh list} 作用是输出jboss现有的日志列表,{./jbossLogDelivery.sh get logName [email protected]} 作用是将指定的日志发送到指定的邮箱 我在一个web程序中打算整