1

我喜欢将我的脚本编写为“modulinos”,可以作为小型 CLI 程序自行调用的 shell 脚本,或者由其他程序作为库导入。

我可以在 bash 中这样做:

https://github.com/mcandre/scriptedmain/tree/master/bash

我也想在 zsh 中这样做。我怎么能这样做?

最重要的是找到一种模拟 bash 的方法:

if [[ "$BASH_SOURCE" == "$0" ]]
then
    main
fi

换句话说,找到这个脚本的名字和被召唤的程序的名字(当它们相等时,运行 main(),当它们不同时,跳过,因为这个脚本是作为库导入的)。

问题是,我认为 zsh 的$0行为类似于 bash $BASH_SOURCE,并且我认为没有与 bash 等效的 zsh $0(工作方式不同)来补偿。

4

1 回答 1

1

检查 的最后一个元素的值zsh_eval_context。如果它等于“toplevel”,那应该等同于$BASH_SOURCE == $0检查为真。

if [[ $zsh_eval_context[-1] == toplevel ]]; then
    main
fi 
于 2014-07-18T15:43:17.473 回答