連載
» 2017年12月21日 05時00分 公開

Linux基本コマンドTips(169):【 source 】コマンド/【 . 】コマンド――シェルの設定を即座に反映させる

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シェルの設定を即座に反映させる「source」コマンドと「.」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シェルの設定を即座に反映させる「source」コマンドと「.」コマンドです。

sourceコマンドとは?

 「source」コマンドは、ファイルに書かれたコマンドを現在のシェルで実行する、というコマンドです。主にシェルの設定ファイルを反映させる際に使用します。

 sourceコマンドはシェルに組み込まれたビルトインコマンドで、bashやtcsh、zshに共通して使用できます。ビルトインコマンド「.」の処理内容は、sourceと全く同じです ※1。

※1 bashでは、「source ファイル」と全く同じ処理を「. ファイル」でも実行できる。しかし、bashの基であるshでは「.」コマンドしか利用できず、sourceコマンドは使用できない。CentOSでは、shはbashへのシンボリックリンクとなっており、Ubuntuの場合はdash(Debian版ash、sh互換の軽量シェル)へのシンボリックリンクとなっている。つまりCentOSのshではsourceコマンドを利用できるが、Ubuntuのshではできない。





sourceコマンドの書式

source ファイル [ファイル実行時の引数]

.コマンドの書式

. ファイル [ファイル実行時の引数]

※[ ]は省略可能な引数を示しています。




sourceと.の主なオプション

 sourceコマンドと.コマンドにはオプションがありません。



環境設定ファイルの内容を即座に反映する

 「source ファイル」で、ファイルに書かれた複数のコマンドを現在のシェルで実行します。このときファイルに実行可能属性は必要ありません。

 シェルの設定ファイルの内容を、ログインし直さず即座に反映させたいときに役立ちます。例えば~/.bashrcを編集した後、「source ~/.bashrc」または「. ~/.bashrc」とします。

 画面1では、ホームディレクトリでviコマンドを使って.bashrcを編集し、sourceコマンドで変更内容を即座に反映しています(viを使った編集内容は省略しました)。

コマンド実行例

source ~/.bashrc

(bashの環境設定ファイル~/.bashrcの内容を反映させる)(画面1


画面1 画面1 sourceコマンドを使って.bashrcの編集内容を反映したところ

シェルスクリプト実行との違い

 「bash ファイル」(またはファイル名のみを入力してシェルスクリプト)を実行した場合と、sourceコマンドを用いた場合は、何が違うのでしょうか。

 「bash ファイル」などの場合は、現在のシェルとは別のプロセスとしてファイルを実行します。catコマンドやlsコマンドなど、ファイルに書かれているコマンド行を実行するだけなら、処理結果は同じになります。しかし、シェル変数や環境変数の扱い方が変わります ※2。

※2 シェル変数は現在実行中のシェルでのみ有効な変数。環境変数は実行されたプログラム(子プロセス)に引き継がれる変数。どちらもシェルで利用可能だ。exportコマンドを使うと、シェル変数を環境変数に変換できる。



 扱い方の違いを確認したのが、画面2です。ファイル(testfile)の中で、実行中のプロセスを一覧表示するpsコマンドを動かし、続いて、プロンプトの表示形式を持つシェル変数「PS1」の内容を変更しました。最後にechoコマンドでPS1の内容を表示しています。

画面2 画面2 「bash testfile」と「source testfile」の実行結果の違い

 プロセスを階層表示するため、psコマンドに--forestオプションを付けました。

 「bash testfile」では、現在のシェルとは異なるプロセスとして実行するため、PS1の内容を変更しても現在のシェルには反映されません。psコマンドの実行結果でも、bashの子プロセスとして別のbashが実行されている様子が分かります。

 画面3では、bashから呼び出すのではなく、ファイルに実行可能属性を追加してから動かし、sourceコマンドとの違いを確認しています。

画面3 画面3 ファイル名を指定して実行した場合とsourceコマンドを用いた場合の違い


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2018 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。