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で使用されるシェルです。私はこの方法がうまくいくとは思わないbash
。 Linuxで使用されるシェルでもあります。
ksh93
Linux(yum install ksh
CentOS / RedHat、Debianなど)を使用しapt-get install ksh
てログインシェルをこの値に設定すると、同じように機能します。 (私はお勧めksh93
しますいいえ pdksh
完全に互換性がないからですpdksh
。)
マイコンピュータから:
$ echo ${.sh.version}
Version AJM 93u+ 2012-08-01
$ grep FPATH ~/.profile
export FPATH=$HOME/fns
そのディレクトリには「ループ」の関数定義があります。
$ 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