早速ですが、Kindle Digital Publishing(KDP)にて電子書籍を発売しました。タイトルは『OS X Mavericks対応 defaultsコマンド活用術 I』、そうです、あるようでなかったdefaultsコマンドの活用本です! 企画・執筆から表紙まですべて私ひとりで行いました。実は、執筆そのものよりCSSの編集などデザインで苦労しましたが……Kindleはもちろん、iOS版アプリでも読めますので、ぜひご一読を。第2弾も予定しています!

さて、今回は「シェル」について。defaultsコマンドといえばTerminal、そこでコマンドを解釈/実行する存在がシェルということで、今回のKindle本とも無縁ではない。否、シェルの機能に着目すればより便利に使えるという意味で、もっと注目されるべきなのだ。そのメリットをかいつまんで紹介しよう。

オーソドックスに「エイリアス」

defaultsコマンドはいろいろな"隠し設定"を引き出すときに便利だが、長々としたコマンドラインを正確に記憶するのは至難の業。Finderで不可視属性ファイルの表示をオン/オフするなど、比較的利用頻度が高いと思われるものでも、スペルミスする可能性がある。そのもっともオーソドックスな解法が「エイリアス」だ。

エイリアスは、OS Xデフォルトのシェルである「bash」では、「alias XXXXX="コマンドライン"」という書式で定義する。Finderの再起動を伴う場合には、「&&」で続ければ1行に記述できる。たとえば、以下の2行をbashの初期化ファイル(ex. ~/.bash_profile)に記述しておくと、「shidden」でFinderの不可視属性ファイル表示が有効(ドットファイル表示)に、「hhidden」でFinderの不可視属性ファイル表示が無効(ドットファイル非表示)になる。

alias shidden="defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder"


alias hhidden="defaults delete com.apple.finder AppleShowAllFiles && killall Finder"

viが苦手な場合は「open -e ~/.bash_profile」を実行すれば、テキストエディットで編集できる

bashの履歴機能を使いこなす

前述したエイリアスは、使いたいdefaultsコマンドの組み合わせが1つか2つのときはいいが、数が増えると手に負えない。エイリアスを記憶できるかどうか怪しいし、そもそもエイリアスを登録するのが手間だ。なにかいい方法はないのか?

そこで筆者がお勧めしたいのが、bashの履歴機能。念のため説明しておくと、bashでは実行したコマンドラインを「~/.bash_history」に500行まで記憶しており、検索機能で呼び出すことができるのだ。足りなければ、「~/.bash_profile」に「export HISTSIZE=10000」とでも記述しておけばいい。

プロンプト($)が表示されているとき、Control-Rを押してみよう。「(reverse-i-search)`':」と表示されるので、おもむろに検索語を入力する。defaultsコマンドの場合、書き込み(write)と削除(delete)とで処理が分かれるため、ここでは仮に「write」としよう。すると、最近入力した「write」を含むコマンドラインが、カーソル位置に現れるのだ。あとはenterを押せば、コマンドラインとして実行できる。

「最近実行したdefaultsコマンドをすばやく呼び出したいときは、Control-Sを押してbashの検索機能を使おう

このワザでは、Control-Rを押すつど過去へ向かって検索が進められるので、何度もControl-Rを押さねばならないのが玉にキズ。目的のコマンドラインをうっかり見過ごしてしまう可能性もある。

筆者がよく使うのは、bashの内部コマンド「history」と検索コマンド「grep」を用いた合わせワザ。「history」とだけ実行すると、500行ものコマンド実行履歴が表示され辟易してしまうが、grepにパイプして絞り込めばOK。以下のコマンド実行例では「write」と「finder」、つまり「defaults write com.apple.finder ~」というコマンドラインに絞って表示している。

$ history | grep write | grep finder

表示されたコマンド履歴をコピー&ペーストなどしないように! なぜなら、「!」に続けて履歴番号を入力し実行するだけで、そのコマンド履歴を再処理できるからだ。たとえば、「300 defaults write com.apple.finder ProhibitBurn -bool true」と表示された行を実行したければ、「!300」とすればOK。これで、以前に実行したdefaultsコマンドを呼び出しやすくなるはずだが、いかに?

多数のコマンド履歴を確認しながら再実行できるこのワザは、かなりお勧めだ