Как написать modulino в zsh?

Мне нравится писать мои сценарии как "modulinos", сценарии оболочки, которые могут быть вызваны сами по себе как небольшие программы CLI или импортированы другими программами в виде библиотек.

Я могу сделать это в bash с помощью:

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

И я хотел бы сделать это и в zsh. Как я могу это сделать?

Самое главное - найти способ эмуляции bash:

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

Другими словами, найдите имя этого script и имя вызываемой программы (если они равны, запустите main(), когда они разные, пропустите, поскольку этот script импортируется как библиотека).

Проблема в том, что я думаю, что zsh $0 ведет себя как bash $BASH_SOURCE, и я не думаю, что для компенсации требуется zsh, эквивалентный bash $0 (который работает по-другому).

Ответ 1

Проверьте значение последнего элемента zsh_eval_context. Если он равен "toplevel", это должно быть эквивалентно проверке $BASH_SOURCE == $0.

if [[ $zsh_eval_context[-1] == toplevel ]]; then
    main
fi