1

В настоящее время мой ZSH имеет некоторые функции, например:

% declare -f
     ... a lot of shell functions appears here.

В настоящее время я пишу сценарий оболочки, который будет вызывать определенную функцию из этого списка (prompt_dir из темы Powerlevel9k для Oh-My-Zsh).

Мой сценарий:

#!/bin/zsh
echo_prompt_segment(){
    # bunch of source-code here
}

zsh_oddeven_dir(){
   prompt_dir echo
}

zsh_oddeven_dir

Проблема в том, что мой скрипт не может получить доступ к этим функциям:

% ./oddeven-pwd.sh
zsh_oddeven_dir:1: command not found: prompt_dir

Когда я declare -f внутри скрипта, в моем скрипте есть только две функции:

% ./oddeven-pwd.sh 
echo_prompt_segment () {

}
zsh_oddeven_dir () {
    declare -f
}

Могу ли я получить доступ и запустить те функции, которые были объявлены выше моего скрипта? Если так, то как?

1 ответ1

1

Поскольку по умолчанию сценарии выполняются в подоболочках, вам требуется экспортировать функции, доступные в bash , но не в zsh .

В bash стандартное место для добавления пользовательских функций находится в ~/.bashrc , но это не выполняется, если bash является интерактивным (в частности, не в подоболочке, выполняющей сценарий), из-за которой экспортируемые функции преодолены.

Что, по-видимому, работает, согласно этому ответу, это поместить объявления вашей функции в ~/.zshenv , который выполняется по умолчанию при каждом запуске, интерактивном или нет.

Вам также следует взглянуть на предыдущий (принятый) ответ, который, помимо прочего, объясняет причину, по которой zsh не поддерживает экспортируемые функции.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .