LINUX.ORG.RU

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

 ,


0

1

Добрый день.

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

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

y=linux.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 functions

...

Вопрос: почему не могу экспортировать функцию?



Последнее исправление: kartg (всего исправлений: 2)

Ответ на: комментарий от Sahas

'Попробуй без "-f" '

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

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

[x@arch][~]% export testf

[x@arch][~]% testf

Hello

[x@arch][~]% bash

[x@arch]: ~>$ testf

bash: testf: команда не найдена

[x@arch]: ~>$ exit

exit

[x@arch][~]% y=testparam

[x@arch][~]% export y

[x@arch][~]% bash

[x@arch]: ~>$ echo $y

testparam

kartg
() автор топика
Ответ на: комментарий от Deleted

У тебя походу zsh вместо bash'а.

да, zsh.

А у него нет -f в параметрах.

[x@arch][~]% export -

option

-A  — specify that arguments refer to associative arrays

-E  — floating point, use engineering notation on output

-F  — floating point, use fixed point decimal on output

-H  — hide value of parameter in listings

-L  — left justify and remove leading blanks from value

-R  — right justify and fill with leading blanks

-T  — tie scalar to array or trace function

-U  — keep array values unique and suppress alias expansion for functions

-Z  — right justify and fill with leading zeros

-a  — specify that arguments refer to arrays

-f  — specify that arguments refer to functions

-h  — hide specialness of parameter

-i  — represent internally as an integer

-l  — convert the value to lowercase

-m  — treat arguments as patterns

-p  — output parameters in form of calls to typeset

-r  — mark parameters as readonly

-t  — tag parameters and turn on execution tracing for functions

-u  — convert the value to uppercase or mark function for autoloading

kartg
() автор топика
Ответ на: комментарий от Sahas

Однако в «zsh» - нет. А я использую его по default.

Переключился в Bash, там все работает:

x@arch][~]% bash

[x@arch]: ~>$ x=testx

[x@arch]: ~>$ echo $x

testx

[x@arch]: ~>$ export x

[x@arch]: ~>$ bash

[x@arch]: ~>$ echo $x

testx

[x@arch]: ~>$ exit

exit

[x@arch]: ~>$ echo $$

23813

[x@arch]: ~>$ bash

[x@arch]: ~>$ echo $$

23859

[x@arch]: ~>$ echo $x

testx

[x@arch]: ~>$ exit

exit

[x@arch]: ~>$ echo $$

23813

[x@arch]: ~>$ testf(){echo «testFunc»;}

bash: syntax error near unexpected token `{echo'

[x@arch]: ~>$ testf(){ echo «testFunc»; }

[x@arch]: ~>$ testf

testFunc

[x@arch]: ~>$ export -f testf

[x@arch]: ~>$ echo $$

23813

[x@arch]: ~>$ bash

[x@arch]: ~>$ echo $$

23883

[x@arch]: ~>$ testf

testFunc

[x@arch]: ~>$

Дело в том что по дефолту то «zsh». Я конечно могу сменить интерпритатор по default, однако как же черт возьми работает в zsh, - если не работает реально, то на это должны быть весомые аргумента, которых мы с Вами не знаем. Как бы реально отказываться от zsh не хотелось бы.

kartg
() автор топика
Ответ на: комментарий от anonymous

Этож волшебный кастыль!

По тексте сам автор говорит так не делайте, а используйте подключаемые библиотеки.

Скорее всего так и есть. Необходимо инклюдить необходимые функции, разграничивая по параметрам и разнося по системе,чтобы в будующем можно было лего копировать функции. Скорее всего из-за этого и выпилили этот аргумент. Я на всякий пожарный написал на оф.форему Arch'a. Если что ответят - отпишу. Если конечно ни у кого идей больше нет?

kartg
() автор топика
Ответ на: комментарий от kartg

Вообщем ответ нашелся:

В Arch Linux как я понял такая возможность выпилина.

Варианты решения ситуации:

1) Использование "eval":

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

2)Подключение функций как библиотек с помощью "source" ./tt:

#!/bin/bash
x=ya.ru
testf() { echo "ping -c1 $x"; }


source ./tt:
Подключился и выполняем.
kartg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.