Файл функции поиска в bash_profile и bashrc, но все еще не работает - PullRequest
1 голос
/ 07 июня 2011

Работает в интерактивной оболочке, но не в скрипте. Этот скрипт и след, следующий за ним, демонстрируют:

set -x
tail -n 2 ../.bash_profile
tail -n 2 ../.bashrc
cat ../FUNC_FILE
FUNC
cat testfunc
testfunc

***14:43:56 502 ~/work>FUNC
imafunc
***14:44:02 503 ~/work>t
++ tail -n 2 ../.bash_profile
. ~/FUNC_FILE
compgen -A function  # List all functions
++ tail -n 2 ../.bashrc
. ~/FUNC_FILE
compgen -A function  # List all functions
++ cat ../FUNC_FILE
function FUNC () { echo imafunc; }
++ FUNC
./t: line 5: FUNC: command not found
++ cat testfunc
FUNC
++ testfunc
./testfunc: line 1: FUNC: command not found

Ответы [ 3 ]

2 голосов
/ 07 июня 2011

Ответ здесь .Вам необходимо экспортировать функцию после ее получения в ~ / .bash_profile.

2 голосов
/ 07 июня 2011

Кажется, работает на меня.Однако ваша демонстрация не демонстрирует проблемы.Нигде не было источника сценариев, которые вы катали.

Мой рабочий пример:

bash$ cat testfunction
function thingie () { echo "Ima function"; }
bash$ cat dofunction
#!/bin/bash
. /path/to/this/directory/testfunction
thingie
bash$ ./dofunction
Ima function

Vs.нерабочий пример:

bash$ cat dontdofunction
#!/bin/bash
cat /homes/bgerard/personal/tmp/testfunction
thingie
bash$ ./dontdofunction
function thingie () { echo "Ima function"; }
./dontdofunction: line 3: thingie: command not found

Используйте "."или (эквивалентно) «источник» вместо «кошка», и он должен работать.

0 голосов
/ 25 октября 2013

Если вы не хотите получать функции из скрипта и хотите, чтобы скрипт видел их так же, как вы можете в интерактивной оболочке, вам нужно экспортировать функцию, как указано в Экспорт функции в оболочке

...