2

私はまだシェルスクリプトを書くことを学んでいるので、これができるかどうかわかりません.

main.sh というメイン スクリプトがあります。

Main.sh

#!/bin/bash
function log {
    echo "[${USER}][`date`] - ${*}" >> ${LOG_FILE}
}

home/script/loadFile.sh && home/script/processData.sh

私の質問は、loadFile.sh および processData.sh スクリプト ファイル内で main.sh のログ関数を呼び出すことができますか? やってみたけどエラー出た

1 行目: ログ: コマンドが見つかりません

ありがとう。

4

3 に答える 3

3

これは移植性がありませんがbash、関数定義をエクスポートするだけです。

export -f log
home/script/loadFile.sh && home/script/processData.sh
于 2013-03-07T12:23:42.777 に答える
1

起動するloadFile.shprocessData.sh、通常の実行可能ファイルとして起動されるため、親シェルはシェルスクリプトとして認識せず、スクリプトごとにシェルインタープリターの新しいインスタンスが起動します。log新しいシェルインタープリターはあなたの関数について何も知りません。

あなたが走っloadFile.shprocessData.shこれが好きなとき:

. home/script/loadFile.sh && . home/script/processData.sh

Shellは、それらを通常の実行可能ファイルではなくシェルスクリプトとして扱い、現在のコンテキストで実行するため、機能logが表示されます。loadFile.shまた、内部で定義され、processData.sh終了後に親シェルに表示される関数/変数。したがって、これらのスクリプトには、親シェルを損傷する多くの方法があり、状況によっては安全ではありません。

于 2013-03-07T12:25:59.093 に答える
1

次のようにプロンプ​​トする必要があります。

. home/script/loadFile.sh && . home/script/processData.sh

しかしexit、loadFile.sh または processData.sh にコマンドがある場合、main.sh も存在します。

于 2013-03-07T12:18:18.410 に答える