Linuxでグローバルに機能を設定する方法

Linuxでグローバルに機能を設定する方法

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で使用されるシェルでもあります。

ksh93Linux(yum install kshCentOS / 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

関連情報