シェルはシェル変数という名前と値のペアを保持する機能を持っています。
(実習)以下のコマンドを実行し、結果を解釈せよ。
$ a=fufufunofu
$ echo $a
$ b = fufufunofu
変数を定義し代入する際に等号の前後に空白を入れてはいけない。また、変数は代入によって生成され変数名に$
をつけた記号によって参照される。変数名は複数文字からなっていてもよい。
クォートの記号の働きが微妙に違うので、注意されたい。
(実習)上のコマンドに続き、次のコマンドを実行し、結果を解釈せよ。
$ echo "$a"
$ echo '$a'
いくつかのシェル変数には既に値が設定されている。
(実習)次のコマンドを実行し、結果を観察せよ。(set
コマンドの出力を縦棒記号 |
で表すパイプでless
コマンドにつないでいる。パイプについては後述)
$ set | less
set
コマンドで表示されるのは、現在利用しているシェルが持っているシェル変数の一覧です。重要なものを見ておくと(set
の出力を参照して確認しておくとよい)
USER: 利用者のユーザ名
UID: 利用者のユーザID
HOME: 利用者のホームディレクトリ
SHELL: 利用者が使っているシェル
PATH: コマンドを探すディレクトリのリスト
TERM: 端末の種類
PS1: プロンプト文字列
PATH
はコマンドを探すディレクトリの名前を:
でつないだリストの形をしています。実行可能ファイルはこのいずれかのディレクトリに入れておくことで、コマンドとしてファイル名を与えただけでシェルによって検索され実行されるようになるのです。同じ名前のファイルがある場合には、前の方にあるディレクトリの中にあるものが優先されます。
$ echo $PATH
で その内容を見ることができます。
存在するはずのコマンドが見つからないときTAに「パスが通ってないんじゃない?」と言われたら、この方法でPATH
を確認してください。
自分のホームディレクトリにコマンド用ディレクトリ(例えば~/bin
)を作り、PATH
に含めることで自分専用のコマンドを増やすことが可能になります。ただしこれには初期設定ファイルを使った方が便利なので、そこで説明します。
(実習)以下を試せ。
$ echo $PATH
$ export PATH= # PATHを空にする
$ ls # 実行できる?
$ pwd # こちらは?違いは何?
$ PATH=/bin:/usr/bin
$ ls
(続いて実習を行うためには、いったんシェルを終了し、新しくシェルを動かしなおすこと)
シェル変数を、シェル以外にそのシェルから起動した別のプログラムにも情報を渡せるようにしたものを環境変数と呼び、export
コマンドによって宣言します。詳しくはシェルスクリプトのところで扱います。環境変数はprintenv
コマンドまたはenv
コマンドによって参照できます。
(実習)次のコマンドを実行し、結果を観察せよ。
$ env
$ printenv
シェル変数、環境変数、aliasなどの個人的な設定を保存するのは、ホームディレクトリにおいた設定ファイルにコマンドを書いておくことによって行います。このファイルにはいくつかの種類がありますが、.bashrc
ファイルが最も基本的なものです。たいていのLinuxではすでにかなりいろいろなことが書かれている.bashrc
ファイルがホームディレクトリにありますので、その設定をこわさないよう、.bashrc
の末尾に設定を加えます。
(実習)次の2行の設定を.bashrc
の末尾に加え、新しいターミナルウィンドウを開いて設定が有効になっていることを確かめよ。
PATH=~/bin:$PATH
a=fufufunofu
ターミナルウィンドウを開き直さないで、既に動いているシェルでこの設定を有効にするには、次のコマンドを実行する(ピリオドに注意)。
$ . ~/.bashrc
誤った設定をすると二度と使えなくなってしまうので注意して下さい。(例えば、.bashrc
の末尾に exit
を加える…この場合、どうしたらよいか?)
(参考文献)このページの記述は 久野靖『UNIXによる計算機科学入門』(丸善、2004)
を参考にしています。
「リダイレクトとパイプ」に進んでください。