使用Ubuntu 18.04。我的.bashrc
文件包括以下行:
if [ -f ~/.bash_usr_functions ]; then
. ~/.bash_usr_functions
fi
在.bash_usr_functions
中,有一堆用户定义的函数,例如:
function MyAmazingFunc()
{
echo 1st param: $1
echo Function body is complex...omitted for brevity
}
现在,每当启动新的Linux终端时,按预期输入MyAmazingFunc 37
即可。太好了!
现在,我编写一个新的bash脚本。该脚本想了解和使用AmazingFunc
。我曾希望使用此代码可以自动完成此操作:
#!/bin/bash
AmazingFunc 37
但是当我使用bash ./NewScript.sh
运行此程序时,出现错误:Command 'MyAmazingFunc' not found
。
因此,我修改了NewScript.sh
,使其包含与.bashrc
相同的行:
if [ -f ~/.bash_usr_functions ]; then
. ~/.bash_usr_functions
fi
这似乎可行,但非常小巧。采购.bash_usr_functions
实际上会启动一个新的子bash
进程并运行.bash_usr_functions
中的任何代码!可以通过在文件中放入echo Hello from user functions
或read VAR1
之类的文件来验证这一点。
是否有更好的方法在代码库中包含您自己的用户函数(即许多脚本),而不必将整个函数复制到每个bash脚本中或使用source
?
答案 0 :(得分:2)
将此添加到您的~/.bashrc
中以将函数导出到随后执行的命令的环境中:
export -f MyAmazingFunc
请参阅:help export
答案 1 :(得分:1)
请注意,“。bashrc”仅对“交互式外壳”-登录外壳或使用(-i)时执行。如果您希望能够在其他环境中运行“ NewScript.sh”,请考虑使用“ include guard”进行替代实现。这将删除对登录shell的依赖。
在NewScript.sh
[ "$user_functions_loaded" ] || source ~/.bash_usr_functions
在〜/ .bash_usr_functions中
user_functions_loaded=1
func AmazingFunc ...
这种方法消除了导出单个函数的需要-回想一下,如果'MyAmazingFunc'正在〜/ .bash_usr_functions中调用其他函数,则这些函数也必须导出
答案 2 :(得分:0)
也许您可以使用BASH_ENV!
尝试将此行添加到您的.xsessionrc文件中。
public synchronized boolean isEmpty()
{
return msgQ.isEmpty();
}