Bash source命令:$0无法确定其自己的位置

时间:2020-01-09 10:46:03  来源:igfitidea点击:

source命令从文件读取并执行命令。
我的parent.sh脚本源于一个名为child.sh的脚本。
但是,child.sh脚本无法使用$0确定其自身位置。
默认情况下,$0给出父脚本的位置。
如何找出源自命令行的脚本可以确定其自身位置?
我的示例脚本:

#!/bin/bash
# /var/www/html/java/tasks/child.sh 
_me="
source child.sh
"     # I want /var/www/html/java/tasks in _currentdir _currentdir="${_me%/*}" echo "${_currentdir}"

当我从parent.sh运行时:

source /var/www/html/java/tasks/child.sh

或者

#!/bin/bash
# /var/www/html/java/tasks/child.sh 
# get child.sh location using the following array
 
###################################################################
# *** Warning it will only work with bash 3.0 and above only **** #
###################################################################
_me="${BASH_SOURCE[0]}"
 
# Fixed 
_currentdir="${_me%/*}"
 
echo "${_currentdir}"

$_currentdir设置为parent.sh所在的目录,该目录位于/root/scripts/java/helper或者中。

我该如何解决这个问题?
您需要使用一个名为BASH_SOURCE的数组变量,其成员是与FUNCNAME数组变量中的元素相对应的源文件名。
从bash版本3.x +开始可用。
要解决您的问题,请按照以下步骤修复child.sh脚本:

cd /tmp
pwd
source /var/www/html/java/tasks/child.sh

测试如下:

/var/www/html/java/tasks

输出示例:

##代码##