web-dev-qa-db-ja.com

bashシェルスクリプトにファイルを含める方法

シェルスクリプトに別のシェルスクリプトを含めて、その機能にアクセスできるようにする方法はありますか?

PHPのように、includeディレクティブを他のPHPファイルとともに使用して、関数名を呼び出すだけで、その中に含まれる関数を実行できます。

90
Mechaflash

スクリプト内に配置するだけです:

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.
158
Gilles Quenot

はい、 source または.だけの短い形式を使用します。

. other_script.sh
31
Paulpro

上記の答えは正しいですが、他のフォルダーでスクリプトを実行すると、いくつかの問題が発生します。

たとえば、a.shb.shは同じフォルダー内にあり、インクルードbには. ./b.shが含まれます。

たとえばxx/xx/xx/a.shでフォルダーからスクリプトを実行すると、ファイルb.shは見つかりません:./b.sh: No such file or directory

私が使う

. $(dirname "$0")/b.sh
30
Fancyoung

私の状況では、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)

0
Raf