![](https://www.alaica.com/wp-content/uploads/linux-57.png)
源命令从文件读取并执行命令。我的parent.sh 脚本源自一个名为child.sh 的脚本。但是,child.sh 脚本无法使用 $0 确定它自己的位置。默认情况下,$0 给出父脚本位置。如何找出源自命令行的脚本可以确定它自己的位置?我的示例脚本:
#!/bin/bash # /var/www/html/java/tasks/child.sh _me = "$0" # 我想要 _currentdir 中的 /var/www/html/java/tasks _currentdir = " ${_me%/*} " echo " ${_currentdir} "
当我从parent.sh运行时:
源child.sh
或者
源 /var/www/html/java/tasks/child.sh
$_currentdir 设置为parent.sh 所在的目录,位于 /root/scripts/java/helper 或 . (当前)目录。我该如何解决这个问题?
您需要使用名为 BASH_SOURCE 的数组变量,其成员是与 FUNCNAME 数组变量中的元素相对应的源文件名。该变量自bash 版本 3.x+起可用。要解决您的问题,请按如下所示修复 child.sh 脚本:
#!/bin/bash # /var/www/html/java/tasks/child.sh # 使用以下数组获取 child.sh 位置 #################################################### ################# # *** 警告它仅适用于 bash 3.0 及以上版本 **** # ############# #################################################### #### _me = " ${BASH_SOURCE[0]} " # 修复 _currentdir = " ${_me%/*} " 回显 “ ${_currentdir} ”
测试如下:
cd / tmp pwd 源 /var/www/html/java/tasks/child.sh
输出示例:
/var/www/html/java/tasks