本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シェルの設定を即座に反映させる「source」コマンドと「.」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シェルの設定を即座に反映させる「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 ファイル」で、ファイルに書かれた複数のコマンドを現在のシェルで実行します。このときファイルに実行可能属性は必要ありません。
シェルの設定ファイルの内容を、ログインし直さず即座に反映させたいときに役立ちます。例えば~/.bashrcを編集した後、「source ~/.bashrc」または「. ~/.bashrc」とします。
画面1では、ホームディレクトリでviコマンドを使って.bashrcを編集し、sourceコマンドで変更内容を即座に反映しています(viを使った編集内容は省略しました)。
source ~/.bashrc
(bashの環境設定ファイル~/.bashrcの内容を反映させる)(画面1)
「bash ファイル」(またはファイル名のみを入力してシェルスクリプト)を実行した場合と、sourceコマンドを用いた場合は、何が違うのでしょうか。
「bash ファイル」などの場合は、現在のシェルとは別のプロセスとしてファイルを実行します。catコマンドやlsコマンドなど、ファイルに書かれているコマンド行を実行するだけなら、処理結果は同じになります。しかし、シェル変数や環境変数の扱い方が変わります ※2。
※2 シェル変数は現在実行中のシェルでのみ有効な変数。環境変数は実行されたプログラム(子プロセス)に引き継がれる変数。どちらもシェルで利用可能だ。exportコマンドを使うと、シェル変数を環境変数に変換できる。
扱い方の違いを確認したのが、画面2です。ファイル(testfile)の中で、実行中のプロセスを一覧表示するpsコマンドを動かし、続いて、プロンプトの表示形式を持つシェル変数「PS1」の内容を変更しました。最後にechoコマンドでPS1の内容を表示しています。
プロセスを階層表示するため、psコマンドに--forestオプションを付けました。
「bash testfile」では、現在のシェルとは異なるプロセスとして実行するため、PS1の内容を変更しても現在のシェルには反映されません。psコマンドの実行結果でも、bashの子プロセスとして別のbashが実行されている様子が分かります。
画面3では、bashから呼び出すのではなく、ファイルに実行可能属性を追加してから動かし、sourceコマンドとの違いを確認しています。
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.