export -f непередаетфункцию.



Добрый день.

Дистрибутив: Linux version 4.7.1-1-ARCH

Мои действия:

y=archlinux.org.ru

testf(){ echo ping $y; }

Не могу выполнить «export -f testf». Результат:

[x@arch][~]% export -f testf

export: invalid option(s)

По мануалу опция "-f" есть:

...

-f — specify that arguments refer to ез "-f" functions

...
-без опции "-f" не экспортирует функцию, только как переменную, т.е:

[x@arch][~]% testf(){ echo «Hello»; }

[x@arch][~]% export testf

тогда, в окружении функция testf() станет переменной вида testf="", т.е. пустой.

Вопрос: почему не могу экспортировать функцию?
Не понял, что интересует .... особо не вдавался ...... просто привожу маленький скриптик ...
cat ~/export.sh
#!/bin/bash
x=ya.ru
testf() { echo ping -c3 $x; }
$(testf)
Запустим скрипт ….. $ ~/export.sh ….. и получим на выходе ….
$ ~/export.sh
PING ya.ru (213.180.193.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (213.180.193.3): icmp_seq=1 ttl=48 time=94.4 ms
64 bytes from www.yandex.ru (213.180.193.3): icmp_seq=2 ttl=48 time=79.3 ms
64 bytes from www.yandex.ru (213.180.193.3): icmp_seq=3 ttl=48 time=75.1 ms
--- ya.ru ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 75.190/83.000/94.451/8.277 ms
Ошибки не исчезают с опытом - они просто умнеют
x5, вам для bash или zsh ?

для bash всё работает, а для zsh можно сделать например так:

$ y=1
$ export testf='testf(){ echo ping "$y"; }'
$ eval $testf
$ testf
$ ping 1
$ zsh
$ y=2
$ eval $testf
$ testf
$ ping 2
export ...
Ошибки не исчезают с опытом - они просто умнеют
vasek
Не понял, что интересует .... особо не вдавался ...... просто привожу маленький скриптик ...
cat ~/export.sh
#!/bin/bash
x=ya.ru
testf() { echo ping -c3 $x; }
$(testf)
Запустим скрипт ….. $ ~/export.sh ….. и получим на выходе ….
$ ~/export.sh
PING ya.ru (213.180.193.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (213.180.193.3): icmp_seq=1 ttl=48 time=94.4 ms
64 bytes from www.yandex.ru (213.180.193.3): icmp_seq=2 ttl=48 time=79.3 ms
64 bytes from www.yandex.ru (213.180.193.3): icmp_seq=3 ttl=48 time=75.1 ms
--- ya.ru ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 75.190/83.000/94.451/8.277 ms

как работать с окружением я знаю, благодарю.
Тут дела в другом.
red
x5, вам для bash или zsh ?

для bash всё работает, а для zsh можно сделать например так:

$ y=1
$ export testf='testf(){ echo ping "$y"; }'
$ eval $testf
$ testf
$ ping 1
$ zsh
$ y=2
$ eval $testf
$ testf
$ ping 2

У меня "zsh"
точно, так работает, а почему только через eval срабатывает? Почему же не работает export -f function
vasek
export ...

Там обучение работы с окружение, а проблемма в том, что функция не передается, а переменные передаются.
x5
Как бы как тот так: опция -f завязана с окружением и функция пишится в окружении в том же .bashrc
$cat .bashrc
first (){
  echo 1;
}
А потом export -f first
Только я не могу догнать что вы хотите получить?
Ошибки в тексте-неповторимый стиль автора©
x5
точно, так работает, а почему только через eval срабатывает? Почему же не работает export -f function
ну не поддерживает zsh данную возможность, вместо этого в нём используют autoload -U, про использование в скриптах пару лет назад на этом форуме было даже обсуждение.
x5
а проблемма в том, что функция не передается, а переменные передаются.
В bash все передается..............zsh не использую - ничего сказать не могу
Создал 2 файла
1 - ./t - в котором определил функцию и делаю экспорт
$ cat ./t
#!/bin/bash
x=ya.ru
testf() { echo "ping -c1 $x"; }
export x
export -f testf
bash
2 - ./tt - выполняю функцию, которая не определена (точнее определена в 1-ом файле) и не определен аргумент
$ cat ./tt
#!/bin/sh
testf
ТЕСТ
1. Запускаю 2-ой файл, естественно ничего нет
./tt
./tt: line 3: testf: команда не найдена
2. Запускаем 1-ый файл
$ ./t
3. Запускаем 2-ой файл
$ ./tt
ping -c1 ya.ru
Все передалось.....
Ошибки не исчезают с опытом - они просто умнеют
А не проще без всякого export и другого bash , используя source .....
#!/bin/bash
x=ya.ru
testf() { echo "ping -c1 $x"; }
source ./tt
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.