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
输出示例:
##代码##