我能找出是谁调用了zsh脚本吗



假设一个脚本master.sh,它被称为

./foo/bar/master.sh

并且包含线路

#!/bin/zsh
. ./x/y/slave.sh

是否可以从slave.sh中找到,即执行源代码的脚本是/foo/bar/master.sh

我不能在这里使用$0,因为这会返回/x/y/slave.sh.

我使用的是zsh 5.0.6

实现这一点的一种方法是让子脚本将调用方的名称作为可选参数。因此,只需`$1``例如:

#!/bin/zsh 
# master/leader
. ./x/y/slave.sh $0 # or hardcoded path
#!/bin/zsh 
# slave/worker
echo "Here is my master $1"

(您也可以使用主设备设置的环境变量来执行另一个自定义协议)

(此解决方案也适用于bash和其他shell)

现在已经可以在zsh中获得信息(感谢Bart Schaefer,他向我指出了zsh/参数模块中变量functrace的存在):

#!/bin/zsh 
# slave/worker
zmodload zsh/parameter
echo "Here is my master ${functrace[$#functrace]%:*}"

"%:*"是必需的,因为functrace数组中的项也包含调用的行号。

最新更新