シェルスクリプトに別のシェルスクリプトを含めて、その機能にアクセスできるようにする方法はありますか?
PHPのように、include
ディレクティブを他のPHPファイルとともに使用して、関数名を呼び出すだけで、その中に含まれる関数を実行できます。
スクリプト内に配置するだけです:
source FILE
または
. FILE
それは同じことです。
$ LANG=C help source
source: source filename [arguments]
Execute commands from a file in the current Shell.
Read and execute commands from FILENAME in the current Shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
はい、 source または.
だけの短い形式を使用します。
. other_script.sh
上記の答えは正しいですが、他のフォルダーでスクリプトを実行すると、いくつかの問題が発生します。
たとえば、a.sh
とb.sh
は同じフォルダー内にあり、インクルードbには. ./b.sh
が含まれます。
たとえばxx/xx/xx/a.sh
でフォルダーからスクリプトを実行すると、ファイルb.sh
は見つかりません:./b.sh: No such file or directory
。
私が使う
. $(dirname "$0")/b.sh
私の状況では、color.sh
の同じディレクトリにあるinit.sh
を含めるために、次のようにする必要がありました。
. ./color.sh
./
ではなくcolor.sh
を直接使用する理由がわかりません。 color.sh
の内容は次のとおりです。
RED=`tput setaf 1`
GREEN=`tput setaf 2`
BLUE=`tput setaf 4`
BOLD=`tput bold`
RESET=`tput sgr0`
File color.sh
を使用してもエラーにはなりませんが、色は表示されません。 Ubuntu 18.04
でこれをテストしましたが、Bash
バージョンは次のとおりです。
GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)