blog

テクニック|sourceコマンドを使って関数や変数をBashにインポートする

source は Python の import や Java の include のようなものです。...

Oct 9, 2025 · 5 min. read
シェア

Linuxシェルにログインすると、特定の作業環境を継承します。シェルにとって "" は、コマンドが期待通りに動作するように、特定の変数が設定されていることを意味します。例えば、 環境変数はシェルがコマンドを探す場所を定義します。これがないと、Bash で実行しようとするほとんどのことが "command not found" エラーで失敗します。環境変数は、日常的なタスクの実行時にはほとんど目に見えませんが、重要なものです。

シェル環境に影響を与える方法はいくつもあります。~/.bashrc や ~/.profile などの設定ファイルを変更したり、起動時にサービスを実行したり、独自のカスタムコマンドを作成したり、独自の 書いたりできます。

ソース経由で環境に追加

Bashにはsourceという組み込みコマンドがあります。sourceは.NETコマンドと同じ機能を実行しますが、Tclコマンドのsourceとは異なります。 sourceは.コマンドと同じ機能を実行しますが、Tclコマンドのsourceとは異なります。実際、組み込みのsourceコマンドはPATHには全くありません。このコマンドの詳細については、help sourceと入力してください。

. コマンドは PATHです。 しかし、sourceコマンドはPOSIXで定義されていませんが、. コマンドと同じように使用できます。

Bashのヘルプによると、sourceコマンドは現在のシェルでファイルを実行します。 現在のシェルで」という表現が重要なのは、サブシェルを起動しないという意味なので、source で行うことはすべて内部で発生し、環境に影響するからです。

ソースが環境に与える影響を調べるには、source コマンドを使用してテスト・ファイルをインポートし、期待どおりにコードが実行されることを確認します。まず、簡単な Bash スクリプトを作成し、hello.sh という名前で保存します:

  1. #!/usr/bin/env bash
  2. echo "hello world"

source指定すると、スクリプトが実行可能に設定されていなくても実行できます:

  1. $ source hello.sh
  2. hello world

また、組み込みの. コマンドを使っても同じ結果が得られます:

  1. $ . hello.sh
  2. hello world

$ . hello.sh. コマンドはテスト・ファイルの内容を正常に実行しました。

変数の設定と関数のインポート

C や C++ で include キーワードを使ってライブラリを参照したり、Python で import キーワードを使ってモジュールを導入したりするのと同じように、source を使ってシェル環境にファイルを「インポート」することができます。これは source の最も一般的な使い方の 1 つで、.bashrc のデフォルトのインクルードでもあります。.bash_aliases をインポートして、ログイン時にカスタマイズしたエイリアスを環境にインポートします。

これはBash関数をインポートする例です。まず、myfunctionsというファイルに関数を作成します。これはパブリックIPアドレスとローカルIPアドレスを表示します:

  1. function myip() {
  2.         curl <http://.>      
  3.         ip addr | grep inet$IP | \
  4.         cut -d"/" -f 1 | \
  5.         grep -v 127\\.0 | \
  6.         grep -v \:\:1 | \
  7.         awk '{$1=$1};1'

この関数をシェルにインポートします:

  1. $ source myfunctions

新しい関数をテストします:

  1. .216.34
  2. inet .0.23
  3. inet6 fbd4:e85f:49c:2121:ce12:ef:59d1
  4. inet .38

source

Bashでsourceを使用すると、参照するファイルをカレントディレクトリから検索します。これはすべてのシェルに当てはまるわけではないので、Bashを使用していない場合はドキュメントを確認してください。

Bashは実行するファイルが見つからない場合、PATHを検索します。繰り返しますが、これはすべてのシェルのデフォルト設定ではないので、Bashを使用していない場合はドキュメントを確認してください。

これらはBashの便利な機能です。これは驚くほど強力で、よく使う関数をディスク上の一元化された場所に保存し、その環境をIDEとして扱うことができます。関数がどこに保存されているか心配する必要はありません。なぜなら、関数はローカルでは/usr/includeの下にあるのと同じことなので、どこにいてもBashが関数をインポートするときに見つけることができるからです。

例えば、共通関数ストアとして ~/.local/include ディレクトリを作成し、このコードブロックを.bashrcファイルに記述します:

  1. for i in $HOME/.local/include/*;
  2.   do source $i

これは、カスタム関数を含む ~/.local/include 内のすべてのファイルをシェル環境に「インポート」します。

sourceや.NETコマンドを使用する際に、カレントディレクトリとPATHを検索するシェルはBashだけです。 コマンドを使用した場合、BashはカレントディレクトリとPATHを検索する唯一のシェルです。

オープンソースにソースを使用

ソースや. を使ってファイルを実行することは、変更をモジュール化したまま環境に影響を与える便利な方法です。次に.bashrcファイルに大量のコードをコピー&ペーストしようと考えている場合は、関連する関数やエイリアスグループを専用のファイルに配置し、sourceを使用してインポートすることを検討してください。

Read next