PRG="$0"

while [ -h "$PRG" ]; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`/"$link"
fi
done PRGDIR=`dirname "$PRG"` [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd` echo "catalina_home is $CATALINA_HOME";
#此处的RPG抓取的是文件名,因为可能是符号链接,所以循环语句的作用就是找到文件真实源路径
-h 用来判断$PRG文件是否存在并且是一个符号链接
ls -ld "$PRG" 查看运行程序的当前目录的详细信息,只是目录,不包括目录下的子目录和文件 link=`expr "$ls" : '.*-> \(.*\)$'` 中
expr 表示要根据某个模式去匹配字符串并返回所匹配到的字符串
或根据某个模式去计算匹配到的字符数。使用方式一般为: expr value : expression "$ls" 表示取变量 ls 中的内容。 '.*-> \(.*\)$' 这部分是一个正则表达式, .* 部分表示任意字符, -> 是实际的两个字符, Linux 中的软链接会在使用 ls -al 命令列出文件的时候,以 "软链接 -> 真实文件" 的方式显示出软链接与其所链接的真实文件。$ 在这里表示行结束 \( 就是 (, 因为 ( shell 中属于特殊符号, 所以需要使用转义; \) 同样是转义为 ) ; 整个 `expr "$ls" : '.*-> \(.*\)$'` 就表示取到软连接的真实文件或真实目录。 [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/nullpwd` 判断变量$CATALINA_HOME是否存在,不存在则给予附值
 

Shell获取当前路径的更多相关文章

  1. 22 SHELL 获取当前路径

    常见的一种误区,是使用 pwd 命令,该命令的作用是"print name of current/working directory",这才是此命令的真实含义,当前的工作目录,这里 ...

  2. shell 获取当前路径 和 2>&1 &的作用

    #!/bin/bash current_path=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) nohup $curren ...

  3. shell,python获取当前路径(脚本的当前路径) (aso项目记录)

    一.shell获取脚本当前路径 cur_dir=$(cd "$(dirname "$0")"; pwd)  #获取当前脚本的绝对路径,参数$0是当前脚本对象 等 ...

  4. 【linux】shell代码,获取当前路径,创建文件夹

    #!/bin/bash CURRENT_PATH=`` cd $CURRENT_PATH MY_LOG=/var/log MY_DB=/var/lib/db [ ! -d $MY_LOG ] & ...

  5. [No00006F]总结C#获取当前路径的各种方法

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. Bash Shell 获取进程 PID

    转载地址:http://weyo.me/pages/techs/linux-get-pid/ 导读 Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运 ...

  7. C#获取当前路径的7种方法

    总结C#获取当前路径的7种方法 C#获取当前路径的方法如下: 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName ...

  8. 用C++和shell获取本机CPU、网卡IO、内存、磁盘等的基本信息

    用C++和shell获取本机CPU.网卡.内存.磁盘等的基本信息: 由于对C++相关的函数没多少了解,但是觉得用shell反而相对简单一些: 一.shell脚本,用来辅助C++获取主机的资源使用信息 ...

  9. linux中用shell获取昨天、明天或多天前的日期

    linux中用shell获取昨天.明天或多天前的日期 时间 -- :: BlogJava-专家区 原文 http://www.blogjava.net/xzclog/archive/2015/12/0 ...

随机推荐

  1. VBA 禁止保存

    禁止保存 在workbook事件中 Private Sub Workbook_BeforeClose(Cancel As Boolean)    Me.Saved = TrueEnd Sub Priv ...

  2. 机器学习入门-随机森林温度预测-增加样本数据 1.sns.pairplot(画出两个关系的散点图) 2.MAE(平均绝对误差) 3.MAPE(准确率指标)

    在上一个博客中,我们构建了随机森林温度预测的基础模型,并且研究了特征重要性. 在这个博客中,我们将从两方面来研究数据对预测结果的影响 第一方面:特征不变,只增加样本的数据 第二方面:增加特征数,增加样 ...

  3. spring事务没回滚

    最近遇见一个问题,用spring管理实务,在service层处理数据,保存数据时出现异常,但没有回滚,检查了一下,发现是因为我用try catch将异常进行捕获了,没有抛出导致的:默认spring事务 ...

  4. tensorflow Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 错误

    Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 在使用tensorflow自带的数据集做手写数字识别的时候 ...

  5. linux 安装禅道

    1. 查看Linux服务器版本信息 # cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 2. 禅道开源版安装包下载 # wge ...

  6. Eclipse安装Svn无法连接问题

    在Eclipse市场上安装完SVN插件后连接SVN时出现以下错误: SVN: '0x00400006: Validate Repository Location' operation finished ...

  7. Data Guard 介绍

  8. box2d 计算下一帧的位置/角度

    var dt:Number=1/30; var y0:Number=_body.GetPosition().y; var y:Number=y0+_body.GetLinearVelocity().y ...

  9. 关于struts2输出excel表

    web.xml: <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com ...

  10. Ansiable Manage MySQL global variables

    mysql_variables - Manage MySQL global variables New in version 1.3. Synopsis Requirements (on host t ...