複数のスクリプトから使用される関数を含めるための最良/一般的な方法は何ですか?

複数のスクリプトから使用される関数を含めるための最良/一般的な方法は何ですか?

私は現在、すべての関数を含む関数ファイルを、それを使用するいくつかのスクリプトにソースすることでこれを実行しました。

source ./functions.sh

私が気づいた欠点の 1 つは、構文エラーに対して bash が出力する行番号が、元のスクリプトの行番号ではなくなったことです。

答え1

あなたの使い方は妥当です。
あなたの問題を再現できません。バッシュシェル私は (GNU bash バージョン 4.1.2 および GNU bash バージョン 4.3.11) で作業できました。以下を参照してください。


テストスクリプト。実行可能にした後、次のようにgo.sh実行できます。./go.shchmod u+x go.sh/bin/bash go.sh

echo  "   ### Here we start ###"  Script line 1
source my_sourced_file
echo Script line 3
casfsda    # this is the line 4 of script
echo Script line 5
f  "Script line #6 using the function from sourced file"
echo "   ### Here we finish ###" Script line 7

現在のディレクトリに配置する必要がある関数を含むファイルmy_sourced_file:

echo Hello word this is the 1 line of my_sourced_file
f(){ echo Hello $1 ;}
f "Gustave line number 3 of  my_sourced_file"
echo linea 4 my_sourced_file

出力(エラー)

### ここから始めます ### スクリプトの行 1
Hello word これは my_sourced_file の 1 行目です
Hello Gustave my_sourced_file の行番号 3
行目 4 my_sourced_file
スクリプトの行 3
./go.sh: 行 4: casfsda: コマンドが見つかりません
スクリプト行 5
Hello スクリプト行 #6 ソースファイルの関数を使用 ### ここで終了 ### スクリプト行 7

  • GNU bash バージョン 4.3.11 でテスト済み
  • 古いGNU bashバージョン4.1.2の場合

関連情報