スクリプトファイルから Bash 関数を呼び出すと失敗しますが、端末から呼び出すと成功します。

スクリプトファイルから Bash 関数を呼び出すと失敗しますが、端末から呼び出すと成功します。

$HOME/ulcwe/software_internal.shBashを使用してUbuntu 16.04で呼び出されなかった関数を含むファイルを作成しました。rse()ファイルのソースは~/.bashrc独自にインポートされ、rse端末のどこからでも呼び出すことができ、エラーなしで実行されます。

しかし、私は走ろうとしています。このスクリプトファイル36行目の呼び出しが含まれていますが、rse次のエラーが発生します。

行36:rse:コマンドが見つかりません。

関数を手動で呼び出すと(rseBashで入力して実行)、成功しますが、Bashスクリプトから呼び出すと失敗するのはなぜですか?スクリプトからどのように正常に呼び出すことができますか?

答え1

スクリプトで関数が利用可能であることを確認する必要があります。これは2つの方法で行うことができます。

  1. source関数定義を含むファイル、または
  2. exportスクリプトの前に関数を呼び出します(export -f rse関数がエクスポートされます)。

シェル変数などの関数は、スクリプトによって継承された環境の一部ではありません。環境変数になるには、シェル変数をエクスポートする必要があり、bash関数もエクスポートできます。

エクスポートされた関数を呼び出すことはできません。どのプロセスを続行するには、他のスクリプトを見てくださいbash

関連情報