在Linux中,如何全局设置一个Function

在Linux中,如何全局设置一个Function

在 AIX 中,我有一个 FPATH 设置函数,只需调用函数名称即可全局访问该函数。我正在尝试在 Linux 中复制此功能。我在 $PATH 变量中设置了该函数,我尝试获取脚本。但我仍然收到“函数未找到”错误。

如果我使用绝对路径调用函数脚本,它就可以工作。示例: FmtMg 是我将文件放置在 /usr/local/lib 目录中的函数

export $PATH=$PATH:/usr/local/lib/FmtMg
source /usr/local/lib/FmtMg

我尝试了以上所有方法,仍然失败。下面是测试该功能的脚本。

#!/bin/ksh
set -u # all variables must be set

unset -f FmtMg
autoload FmtMg

GM=`basename $0`

print "Testing FmtMg\n"

FmtMg  -p$GM -l$LINENO -s0 "FmtMg Test Completed."

答案1

FPATH是一个ksh功能,这可能是您在 AIX 上使用的 shell。我不相信bash这种方式可以工作,这可能是您在 Linux 上使用的 shell。

如果您ksh93在 Linux 上使用(例如yum install ksh在 CentOS/RedHat 上;apt-get install ksh在 Debian 上)并将登录 shell 设置为该值,那么它将以相同的方式工作。 (我推荐ksh93不是 pdksh因为pdksh不完全兼容)。

在我的机器上:

$ echo ${.sh.version}
Version AJM 93u+ 2012-08-01

$ grep FPATH ~/.profile 
export FPATH=$HOME/fns

在该目录中,我有一个“loop”的函数定义

$ head -3 $FPATH/loop
# A loop function: loop var from to 'commands'
function loop
{

在我使用它之前我们可以看到ksh知道它是一个函数,但尚未定义

$ whence -v loop
loop is an undefined function

当我尝试使用它时,ksh自动从$FPATH条目中定义它

$ loop i 1 5 'echo $i'
1
2
3
4
5

$ whence -v loop      
loop is a function

相关内容