いまさら聞けないシリーズの第4弾は、「シェルの基本技」について。コマンドのスペルなど覚えていられない、クリックした位置から編集できないと嘆く前に、シェルの履歴機能と基本的な編集機能について少しだけ知識を身につけよう。

以前実行したコマンドラインを再実行する「C-p」

終日をターミナルで過ごすような猛者を除けば、シェル上で実行するコマンドの種類は限られている。カレントディレクトリを変更する「cd」、ファイルコピーに使う「cp」、ファイルの移動/リネームを行う「mv」が3巨頭とでもいえるだろうか。これらのコマンドは短いうえに書式は単純で覚えやすく、オプションを使うことも少ないので入力にさほどの苦労はない。

一方、当コラム定番のコマンド「defaults」はどうだろう。「defaults write com.apple.iTunes show-store-arrow-links」などとオプション/内部コマンド(この場合「write」)が必須なうえに、長々とした引数もある。これを正確に覚えろというのは無理な相談だ。

しかし、いちど実行したコマンドラインは「C-p」(Control+P)で再表示できる。bashの場合、実行したコマンドは「~/.bash_history」という不可視ファイルに記録されるので(初期値で500行)、それを「C-p」というショートカットキーで呼び出すというわけだ。押した数だけ遡れるので、最近実行したコマンドラインであれば数回C-pを押せば再表示できるだろう。

なお、同じ機能がカーソルキー「↑」にもアサインされているが、Controlキーを中心とした操作体系を体得するためにも、「C-p」で覚えたほうがいい。うっかり過去へ行き過ぎてしまったときに備え、P(Previous)の反対としてN(New)、「C-n」(カーソルキー「↓」)もあわせて覚えておきたい。

C-pを押すたびに、コマンド実行履歴を溯る。初期値では最大500件保存されているので、よほどターミナルを使うユーザでないかぎり、過去に実行したコマンドを呼び出せるはずだ

行編集の基本テクニック

「C-p」で呼び出した過去のコマンドラインは、そのまま再実行できればEnterキーを押すだけで済むが、実際のところそうはいかない。「cd」コマンドの引数(パス)を一部変更したい、「defaults write ~」のwriteをdeleteに変えたい、といった編集を要する場面が少なからずあるからだ。

そんなときは、bashの行編集機能を活用しよう。カーソルを1つ前(左)へ移動するならBackの「B」、1つ後ろ(右)へ移動するならForwardの「F」を、それぞれControlキーとともに押せばいい。「C-p」に倣って表現すれば「C-b」と「C-f」だ。左右のカーソルキーも使えるが、操作体系統一のためにもControlキーとのコンビネーションで覚えておきたい。

1文字づつ移動するのはまどろっこしい、行の先頭付近に編集したい部分がある、という場合には「C-a」を使おう。これで、カーソルは一足飛びに行頭へとジャンプする。行末へジャンプしたければ「C-e」だ。いずれにしてもControlキーを利用するので、すぐ身につくのではないだろうか。

なお、コマンドの入力途中だがキャンセルしたい、最初からやり直したい、そんなときにはControlキーを押しながらC(C-c)を押そう。これで、その行の編集作業はキャンセルとなり改行される。

「write」を「delete」に書き換えたい、そんなときには「C-a」で行頭へジャンプし、「C-f」を数回叩けばいい

bashの主な行編集用ショートカットキー
C-a 行の先頭へカーソルを移動
C-b カーソルを1文字分前方(左)へ移動
C-e 行の末尾へカーソルを移動
C-f カーソルを1文字分後方(右)へ移動

コマンドの綴りに自信がない

必ず覚えておきたいシェル(bash)の機能のひとつに、「入力補完」が挙げられる。これは、コマンド名やファイルパスなどコマンドの実行に必要な文字列を、状況にあわせて適当に見繕ってくれるという便利機能だ。

たとえば、「defaults」というコマンドを入力したいが、綴りに自信がなかったとする。8文字タイプするのが面倒、という理由でも構わない。そんなときは、「def」まで入力してから「TAB」キーを押してみよう。残りの「aults」が自動的に補完されたことに気付くはずだ。

この機能は、bashがコマンドサーチパスが通った領域(第133回を参照)の内容をデータベース化し、前方が一致するコマンドを候補として表示することによって実現されている。「d」と「de」では一致するコマンドが複数あるため、いちど「TAB」キーを押すだけでは「defaults」以外の候補も表示されてしまうのだ。

入力補完機能は、長々としたパスを入力するときにも大いに役立つ。たとえば、cdコマンドの引数に「/System/Library/CoreServices」を与えるとしてみよう。ターミナルに不慣れなユーザがこれを正確に入力するのは苦痛を伴うが、入力補完機能を知っていれば「/S」-TAB-「L」-TAB-「Cor」-TAB、わずかこれだけのキー入力で28文字からなるパスを入力できてしまう。もちろんcd以外のコマンドでも利用できるし、日本語ファイル名にも対応しているので、入力が面倒なときはとりあえずTABキー、と覚えておこう。

コマンドの綴りに自信がない場合は、数文字を入力して「TAB」キーを押すと、先頭が一致するコマンドが候補として表示される