在 source 命令中使用时,有没有办法获取 bash 脚本的路径

Sac*_*yer 5 bash command-line

我想设置一个相对于脚本位置的环境变量。我可以在脚本(test.sh)期间轻松找到并设置它:

#!/bin/bash
export MY_VARIABLE=$(dirname $0)
echo MY_VARIABLE is : $MY_VARIABLE
Run Code Online (Sandbox Code Playgroud)

称呼:

./test.sh
Run Code Online (Sandbox Code Playgroud)

输出:

MY_VARIABLE is : .
Run Code Online (Sandbox Code Playgroud)

如果我想在其他脚本中使用该变量,则需要使用 source 命令进行设置。这当然不起作用,因为我现在不是调用 test.sh 脚本,而是调用 source 命令。

source test.sh
Run Code Online (Sandbox Code Playgroud)

输出:

dirname: illegal option -- b
usage: dirname path
MY_VARIABLE is :
Run Code Online (Sandbox Code Playgroud)

有没有办法在脚本中定义一个环境变量,然后可以与 source 命令一起使用?

Sac*_*yer 2

测试2.sh:

#!/bin/bash
MY_VARIABLE=$(PWD)/$(dirname $BASH_SOURCE)
echo MY_VARIABLE is : $MY_VARIABLE
Run Code Online (Sandbox Code Playgroud)

称呼:

./test2.sh
Run Code Online (Sandbox Code Playgroud)

输出:

MY_VARIABLE is : /some/path/.
Run Code Online (Sandbox Code Playgroud)

称呼:

source ./test2.sh
Run Code Online (Sandbox Code Playgroud)

输出:

MY_VARIABLE is : /some/path/.
Run Code Online (Sandbox Code Playgroud)

感谢@webmark 和@GordonDavisson。