BASH_SOURCE 用法

时间:2022-06-08 12:03:31

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