Экспорт функции в оболочке

Я обычно работаю с Notepad2, весь текст, который я копирую с сети, вставляется тут же снова использованный, который позволяет мне чистить его (от формата и делать модификации).

можно загрузить Notepad2 здесь

85
задан codeforester 30 March 2019 в 20:16
поделиться

3 ответа

Функция export -f специфична для Bash:

parent

#!/bin/bash
plus1 () { echo $(($1 + 1)); }
echo $(plus1 8)
export -f plus1
./child 14 21

child

#!/bin/bash
echo $(plus1 $(($1 * $2)) )
102
ответ дан 24 November 2019 в 08:23
поделиться

Если вы создаете подоболочки с помощью () , то они унаследуют моментальный снимок всех определений, параметров и переменных оболочки.

Если вы выполняете их как программы, тогда вы можете поместить определения в .bashrc .

Если вы пытаетесь подделать существующий скрипт для выполнения оболочки или подстановки для команды PATH, тогда .bashrc будет работать в зависимости от по деталям исполнения. В противном случае вы можете вместо этого выполнить сценарий оболочки, который просто выполняет . или источник включаемого файла, который определяет функции, а затем делает то же самое со сценарием оболочки с заменяемыми командами.

Сценарий оболочки может выглядеть примерно так:

1
ответ дан 24 November 2019 в 08:23
поделиться

Если вы используете ksh или zsh:

, вы можете использовать переменную окружения FPATH, куда можно поместить все ваши функции.

Если FPATH установлен на интерактивном интерпретаторе, а команда или функция не найдена в текущем окружении оболочки или PATH, то в перечисленных там каталогах производится поиск на предмет существования файла, названного в честь пропущенной команды. Если он найден, то он исходит из текущего окружения оболочки, и ожидается, что он определит функцию.

Таким образом, вы можете поместить все свои функции в FPATH, и дочерние скрипты также смогут его найти.

Вы можете использовать команду autoload в скриптах оболочки для загрузки требуемых функций:

autoload fun_a fun_b

В zsh, для работы FPATH требуется autoload. В ksh и его близких родственниках, я считаю, что это просто заставляет функции, определенные в FPATH, переопределять обычную команду в вашем PATH, как это было бы, если бы они были определены напрямую.

Некоторые подробности по FPATH и автозагрузке:

3
ответ дан 24 November 2019 в 08:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: