在bash_profile和bashrc中获取函数文件但仍然不起作用

时间:2011-06-06 21:57:55

标签: bash function .bash-profile

它适用于交互式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

3 个答案:

答案 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中的答案导出该函数