GNU/Linuxシステムを最大限に活用するには、やはりコマンドプロンプトとシェルスクリプトへの習熟が欠かせない。とはいえ、そうした処理はなるべく手早く済ませたいものだ。本稿では、コマンドラインでの作業の手間を最小化してくれる強力な方法として、シェルのエイリアスと関数を紹介する。
|
|
ここではbashを例にとって説明するが、以下に示す概念のすべてとコードの大半はその他のシェルでも通用する。
シェルのエイリアスとは、頻繁に実行する長いコマンドを覚えやすくするために付ける別名のことである。コマンドラインから入力された文字列に対し、シェルはまず設定済みエイリアスの一覧とのマッチングを行う。一致するものがあれば、そのエイリアスは対応するテキストに置き換えられ、結果として得られるコマンドライン全体の評価と実行が行われる。以下に、エイリアス定義の例を示す。
alias sqlmanage='mysql -p -u my_MySQL_userid MySQL_database_name'
alias ssh2rws='ssh -p port_number my_remote_userid@my.remote.web.server'
alias findbig='find . -type f -exec ls -s {} \; | sort -n -r | head -5'
alias cof='clear;ls -lrt'
最初の2つはそれぞれローカルのMySQLデータベースとリモートサーバへの接続用コマンドを短縮して置き換えるもの、3つ目はカレントディレクトリからサイズの大きい上位5つのファイルを見つけ出すものである。4つ目のエイリアスは、ほかの3つよりもシンプルで短いが、最も融通が効く。エイリアス置換のしくみにより、この「cof」を次のように使えばファイルまたはディレクトリの一覧を古いものから順に表示できる。
cof # スクリーンをクリアして、カレントディレクトリの一覧を表示
cof /tmp /usr # スクリーンをクリアして、/tmpと/usrの一覧を表示
cof *.jpg # スクリーンをクリアして、カレントディレクトリにある.jpgファイルの一覧を表示
エイリアスの定義はシェルのセッションの途中でプロンプトから行えるが、システムまたは個人用の設定ファイル(「/etc/bashrc」または「$HOME/.bashrc」)に記述しておけば、セッションごとに定義し直す必要がなく便利である。また、使っているシェルでどんなエイリアスが定義されているかを確認するには、プロンプトの後に「alias」とだけ入力すればよい。
このように便利なエイリアスだが、制限事項や問題点がいくつかある。まず、適切なオプション(bashのmanページを参照)を設定しない限り、シェルが対話モードのときには使えない。また、シェルは、少なくとも完全な1行分の入力を読み込んだうえでエイリアスの置換を行い、結果として得られるコマンド全体を実行する。そのため、複数の定義済みエイリアスを同じ行で使うことはできても(ただし、意図したとおりの実行結果にならない場合がある)、同じ行のなかでエイリアスの定義と利用を行うことはできない。同様の理由により、シェル関数の内部でエイリアスを定義しようとすると問題が起こりうる。こうした問題を防ぐには、エイリアスを定義する行ではそれ以外のことを一切行わないようにしないといけない。つまり、複合コマンドや条件に応じて実行されるコードブロック内でのエイリアスの利用や定義は、避ける必要があるわけだ。