它适用于交互式shell,但不适用于脚本。此脚本和后面的跟踪说明:
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
答案 0 :(得分:2)
似乎适合我。但是,你的演示并没有真正证明这个问题。你没有在那里找到你所捕获的剧本。
我的工作范例:
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
使用“。”或(等效地)“来源”代替“猫”,它应该有用。
答案 1 :(得分:2)
答案是here。您需要在〜/ .bash_profile中获取函数后导出该函数。
答案 2 :(得分:0)
如果您不想在脚本中获取函数并希望脚本像在交互式shell中那样查看它们,则需要按Exporting a function in shell中的答案导出该函数