在 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