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


4

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

#!/bin/bash
export MY_VARIABLE=$(dirname $0)
echo MY_VARIABLE is : $MY_VARIABLE

呼叫:

./test.sh

输出:

MY_VARIABLE is : .

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

source test.sh

输出:

dirname: illegal option -- b
usage: dirname path
MY_VARIABLE is :

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



1
@GordonDavisson谢谢你的提示。使用$ BASH_SOURCE代替$ 0工作正常,我可以解决我的问题。我只缺少4个声誉来回答问题并接受答案,所以这里是答案中的答案。这个解决方案适用于相对路径,在我的情况下也可以:test.sh#!/ bin / bash echo pwd / dir:$(PWD)/ $(dirname $ BASH_SOURCE)
Sacha Guyer

@SachaGuyer,刚给你一些票,你应该让代表现在这样做。
webmarc

Answers:


2

test2.sh:

#!/bin/bash
MY_VARIABLE=$(PWD)/$(dirname $BASH_SOURCE)
echo MY_VARIABLE is : $MY_VARIABLE

呼叫:

./test2.sh

输出:

MY_VARIABLE is : /some/path/.

呼叫:

source ./test2.sh

输出:

MY_VARIABLE is : /some/path/.

谢谢@webmark和@GordonDavisson。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.