参考 bash少见的用法 http://blog.csdn.net/wonderisland/article/details/22892759。

原有项目里自带的启动脚本用到了bash_source获取脚本名称,最后使用如下方式启动程序。

nohup nice -n $APP_NICENESS "${this}" $command "$@" > "$log" 2>&1 < /dev/null &

然而发现有的同学调用后会报出

nice: .....: No such file or directory之类的错误

参考线上脚本写了一个测试shell 名为testbashsource

this="${BASH_SOURCE-$0}"

echo $this

bin=`dirname "$0"`

echo $bin

bin=`cd "$bin"; pwd`

echo $bin

APP_HOME=`dirname "$bin"`

echo $APP_HOME

使用几种不同的方式启动脚本:

17:53 [root@a05.stat.collector.qingdao.youku]$ ./testbashsource

./testbashsource

.

/vol/collector/bin

/vol/collector

tty:[3] jobs:[0] cwd:[/vol/collector/bin]

17:53 [root@a05.stat.collector.qingdao.youku]$ /bin/sh testbashsource

testbashsource

.

/vol/collector/bin

/vol/collector

tty:[3] jobs:[0] cwd:[/vol/collector/bin]

17:53 [root@a05.stat.collector.qingdao.youku]$ /bin/bash testbashsource

testbashsource

.

/vol/collector/bin

/vol/collector

由上可知${BASH_SOURCE-$0}这种用法在使用./testbashsource方式启动的时候得到的值是./testbashsource;在使用sh testbashsource之类的方法启动时候得到的值只有testbashsource

这造成了在最后nice部分启动的时候找不到启动脚本的路径报错。

同样可以注意到的在用到pwd命令后获得的绝对路径都是一样的,所以以后再使用路径的时候尽量还是都用绝对路径这种方法更安全可靠一点。

BASH_SOURCE 用法的更多相关文章

  1. linux中BASH_SOURCE[0]

    在C/C++中,__FUNCTION__常量记录当前函数的名称.有时候,在日志输出的时候包含这些信息是非常有用的.而在Bash中,同样有这样一个常量FUNCNAME,但是有一点区别是,它是一个数组而非 ...

  2. BASH_SOURCE

    在C/C++中,__FUNCTION__常量记录当前函数的名称.有时候,在日志输出的时候包含这些信息是非常有用的.而在Bash中,同样有这样一个常量FUNCNAME,但是有一点区别是,它是一个数组而非 ...

  3. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  4. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  5. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  6. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  7. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  8. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  9. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

随机推荐

  1. 十、C# 异常处理

    1.多异常类型 2.捕捉异常 3.常规catch块 4.异常处理的指导原则 5.定义自定义异常   1.多异常类型 代码要引发任何异常,只需为要引发的异常实例实例附加关键字throw作为前缀.具体选择 ...

  2. 【BZOJ2752】【线段树】高速公路

    Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站. Y901高速公路是一条由N-1段路以及N个 ...

  3. 『重构--改善既有代码的设计』读书笔记----Remove Middle Man

    如果你发现某个类做了过多的简单委托动作,你就可以考虑是否可以让客户直接去调用受托类.在Hide Delegate中,我们介绍了封装受托对象的好处,但好处归好处也存在代价,就是当你每次需要在受托对象中增 ...

  4. asp.net在应用母版的页面下采用了ModalPopupExtender弹出窗中应用autocomplete

    autocomplete是jqueryUI的一个插件,可以实现自动填充的功能. 要点:1.应用了母版页,所以取页面上控件的ID时与一般方法不同 2.由于用了ajax的updatepanel,所以会出现 ...

  5. 使用Thinkphp框架开发移动端接口

     本文给大家分享的是使用thinkphp框架开发移动端接口的2种方法,一种是开发API,另外一种是实现移动端访问自动切换移动主题模板,从而实现伪app访问,下面我们就来详细看下如何实现吧. 方案一:给 ...

  6. mysql数据类型——枚举enum(‘F’,'M')

    ENUM(“value1”,“value2”,...) 说明:枚举,列值可赋予值列表中的某个成员 允许的属性:除通用属性外无其他属性 缺省值:如果列可为NULL,则为NULL:如果列为NOTNULL, ...

  7. 一个获取Android手机root权限的程序

    PermRoot.bat可以获取root权限. IsRoot.bat可以测试是否拥有root权限. UnRoot.bat可以清除root权限. 下载地址: http://pan.baidu.com/s ...

  8. 深入浅出C语言中的堆和栈

    在谈堆栈的时候,我在这有必要把计算机的内存结构给大家简单的介绍下(高手们可以直接飘过) 一. 内存结构   每个程序一启动都有一个大小为4GB的内存,这个内存叫虚拟内存,是概念上的,真正能用到的,只是 ...

  9. 苦练SOC“基本功”启明星辰九年磨一剑

    2011年9月28日——10月31日,国内知名网络安全公司——启明星辰,作为协办方参与了51CTO在2011年举办的中国SOC安全管理平台市场应用现状调查. SOC(Security Operatio ...

  10. Windows下Vundle插件BundleSearch命令出现错误解决方案

    纯粹参考他人博文,已证明解决方案正确,转载时请注明参考链接!!! 参考链接: http://www.tuicool.com/articles/e2aiEn 在Windows下使用Vim时,用Vundl ...