2013-02-12 51 views
6

所以我想制作一个可移植的bashrc/bash_profile文件。我有一个脚本,我象征性地链接到.bashrc,.bash_profile等。然后,我正在查看$0并根据哪个脚本被调用来切换我的操作。问题是shell调用bashrc脚本,当然它会执行bash,这对我来说意味着$0-bash$1更多未设置为脚本名称。如何获得在bash中执行的脚本名称?

所以我的问题是,在bash中如何获得正在执行的脚本的名称。不是执行它的二进制文件,例如庆典?

我认为它给我-bash$1没有被设置,因为它实际上不是一个新的过程。有任何想法吗?

回答

2

变量BASH_ARGV应该工作,它出现在脚本being sourced

$BASH_ARGV 
+0

意思是这不是通用的。当解析$ ARGV时,你必须知道你被其他脚本调用了。也许我错了。如果我错了,你应该加强对你答案的解释,例如添加一个例子 – hek2mgl 2013-02-12 15:02:28

24

尝试:

readlink -f ${BASH_SOURCE[0]}

或者只是:

${BASH_SOURCE[0]}

备注: “script.sh”

$0,只有当用户执行 “./script.sh”

$BASH_ARGV只有当用户执行工程或 “来源script.sh”

工作

${BASH_SOURCE[0]}适用于这两种情况。

readlink -f在使用符号链接时很有用。

+0

这应该是公认的答案,因为它提供了更多的细节,并解释了不同的场景更清晰。 – piratemurray 2015-07-20 19:31:42