参考 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命令后获得的绝对路径都是一样的,所以以后再使用路径的时候尽量还是都用绝对路径这种方法更安全可靠一点。