我可以找出谁调用了zsh脚本吗?

时间:2015-03-30 09:45:38

标签: linux shell unix zsh

假设脚本master.sh,称为

./foo/bar/master.sh

并包含行

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

是否有可能从slave.sh 中找到,正在进行采购的脚本是 ./ foo / bar / master.sh ?< / p>

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

我正在使用zsh 5.0.6

2 个答案:

答案 0 :(得分:0)

您可以实现此目的的一种方法是将子脚本作为可选参数作为调用者的名称。因此可以使用`$ 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)

答案 1 :(得分:0)

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

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

&#39;%:*&#39;是必要的,因为functrace数组中的条目也包含调用的行号。