以下の構造を持つunixスクリプトを作成しようとしています。基本的に、私はいつも使っている関数の "ライブラリ"スクリプトを持っていて、export -f functionName
を使ってすべての関数をエクスポートします。ライブラリ関数を使用する実際のスクリプトは、まずライブラリスクリプトを実行してエクスポートコマンドを実行し、理論的にエクスポートされたばかりの関数にアクセスします。ただし、これはエラーで示されているように機能しません。どちらのスクリプトもテスト用にchmod 777
になっています。私は以下の例を文字通り試しています。これらはどこかのプロードコードの代用品ではありません。私は何をしようとしているものをコピーして貼り付けた。Bash:エクスポートされた関数が別のスクリプトに見つかりません
LibraryFunctions.sh:
#!/bin/bash
function getHelloWorldString() {
echo "Hello World"
}
export -f getHelloWorldString
TestLibraryFunctions.sh
#!/bin/bash
./LibraryFunctions.sh
function testExportedHelloWorld() {
echo $(getHelloWorldString)
}
testExportedHelloWorld
結果:
[email protected]:~/testDir $ ./TestLibraryFunctions.sh
./TestLibraryFunctions.sh: line 6: getHelloWorldString: command not found
編集:私のために働いたソリューション:
TestLibraryFunctions.shから./LibraryFunctions.sh
を削除LibraryFunctions.sh
からexport -f getHelloWorldString
を削除
はトップ
でTestLibraryFunctions.shからsource LibraryFunctions.sh
を追加しました-------新しいファイル------ :
LibraryFunctions.sh:
#!/bin/bash
function getHelloWorldString() {
echo "Hello World"
}
テストLibraryFunctions.sh
#!/bin/bash
source LibraryFunctions.sh
function testExportedHelloWorld() {
echo $(getHelloWorldString)
}
testExportedHelloWorld
ありがとうございます!
'に変更してください。 。/ LibraryFunctions.sh'を実行すると、作業が開始されます。 – Harald
この場合、 'export'は必要ありません。それは、あなたがここで使用していないものをサブシェルで利用できるようにします。 – Harald
Harald氏は 'LibraryFunctions.sh'を独自のスクリプトとして実行しているので、独自のシェルセッションで実行しています。 'export'された関数と変数が見えるように、現在のシェルセッションにソース(' .')を入れる必要があります。 –