如何获取 bash 脚本文件所在的目录,当该脚本文件包含在另一个脚本文件中时(这与 this question 不同)?
/script1.sh
. /dir2/script2.sh
/dir2/script2.sh
# echoes "/dir2"
echo whatevergetsthatdir
这是我要“修复”的脚本
/etc/init.d/silvercar-gameserver(每个实例都是唯一的)
#!/bin/bash
#
# /etc/rc.d/init.d/silvercar-gameserver
#
# Initscript for silvercar game server
#
# chkconfig: 2345 20 80
# description: lalalalala
#CONFIG
BIN=/opt/silvercar-gameserver # Want to get rid of this
CONF=/etc/opt/silvercar-gameserver
. /etc/init.d/functions
. $BIN/gameserver.sh.inc
exit 0
/opt/silvercar-gameserver/gameserver.sh.inc(每次安装都不会更改。在 svn 中)
# Meant to be included from a script in init.d
# Required input:
# CONF (e.g. /etc/opt/silvercarserver)
# -- Installation config (must provide JSVC, JAVA_HOME)
. $BIN/localconf.sh
# -- Instance config (must provide ASUSER, ASWORK)
. $CONF/conf.sh
PIDFILE=$ASWORK/running.pid
LOGDIR=$ASWORK/log
CLASS=tr.silvercar.gameserver.runner.DaemonGameServer
ARGS=$CONF
start() {
echo "Going to start Gameserver..."
export JAVA_HOME
cd $BIN
$JSVC -jvm server -procname silvercar-gameserver -pidfile $PIDFILE -user $ASUSER -outfile $LOGDIR/stdout -errfile $LOGDIR/stderr \
-cp `cat classpath` -Dlogroot=$LOGDIR $CLASS $ARGS
echo "Gameserver started!"
}
stop() {
echo "Going to stop Gameserver..."
$JSVC -stop -pidfile $PIDFILE $CLASS
echo "Gameserver stopped!"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: /etc/init.d/silvercar-gameserver {start|stop|restart}"
exit 1
;;
esac
最佳答案
如果您有 bash 3.0 或更新版本,您可以使用 BASH_SOURCE 来准确获取您需要的内容,而无需依赖调用程序为您设置任何环境变量。请参见下面的示例:
#test.sh
source some_directory/script2.sh
#some_directory/script2.sh
echo $BASH_SOURCE
echo $(dirname $BASH_SOURCE)
输出将是:
$ ./test.sh
some_directory/script2.sh
some_directory
关于bash - 获取 bash 脚本文件所在的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6291827/