わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

ファイルが新しくなった〜コマンド編

シェル(コマンドライン)で,pythonを実行するとします.
http://d.hatena.ne.jp/hrkt0115311/20090322/1237682290の状況をお借りしまして,apt-get install pythonでパッケージからインストールし,それと別にソースからビルドしたものがある状態を考えます.
そういう複数バージョンがあるとき,石橋を叩いても渡らないと称される慎重派の人は,「python」を実行したら,どのファイル,そしてどのバージョンを実行することになるのかを知っておきたいと考えます.
そんなときは,次の2つのコマンドが有用です.

  • どのファイル: which python
  • バージョン: python --version

python」は,gccperlrubysvn,git,nkfなど,Linuxで実行できるたいていのコマンドに置き換えられます.
「どのファイルを実行するか」を決める重要な情報として,サーチパス*1と呼ばれるものがあり,環境変数PATHまたはpathによって決まります.bashでもzshでも使用可能なPATHを使って説明すると,現在のサーチパスがどうなっているかは,「echo $PATH」で知ることができ,また,「PATH=/usr/local/bin:$PATH」のように実行することで,優先度を変えられます.
サーチパスというと,whereとwhereisについて書かないといけませんね.where pythonを実行すると,サーチパスすべてを調べます.複数個の出力があるとき,その先頭は,which pythonと同じです.すなわちそのファイルを使って実行することになるわけです.whereisは,コマンドだけでなく,ライブラリやヘッダ,マニュアルページなどのファイルやディレクトリも知ることができます.
シェル上で,何らかのコマンドを確かにインストールしたのに,実行できない,インストール前のバージョンを実行しているっぽいときは,コマンドサーチパスよりも,シェルの持つハッシュテーブルの内容が優先しているかもしれません*2.「rehash」と実行してから,もう一度,したいコマンドを実行してみましょう.
バージョンについて,説明するタイミングを失いましたが,まあこれは電車やバスの時刻表で考えるといいでしょう.時刻表が改訂されると,それまでの時刻表は多くの人にとって,無意味になります.もちろん,かつてのダイヤを見て思いにふける鉄道・バスファンの人や,容疑者のアリバイを崩そうとする刑事・探偵までもが,今の時刻表しか見られないとなるとよろしくありませんが.そして,財布や定期入れに入るような携帯用の時刻表を見て,それが最新なのかを知ることはできないにしても,古いか否かを知ることならできます.その時刻表の改訂日(あるいは改正日)を見るのです.配布されるソフトウェアにも,その作成日もしくは配布日という情報があるといえばあるのですが,必ずしもそれを知る必要はなく,多くのユーザは「バージョン」と呼ばれる数字列や文字列を知って他のと見比べ,問題ないバージョンか,バージョンアップすべきかを判断することになります.
「--version」というオプションについてはちょっと注意すべきなのですが,Rubyにどっぷりな人は「python -v」とやって泣きを見る,と書くにとどめます.ともあれ,未知のコマンドを知りたいときに,最初につけるオプションは,「--version」です*3

予告

当エントリは,以下の三部作の一部です.次回作の公開は,明日かもしれませんし,一生ないかもしれません.

  1. ファイルが新しくなった〜コマンド編
  2. ファイルが新しくなった〜自作ファイル編(未公表)
  3. ファイルが新しくなった〜生成ファイル編

*1:「検索パス」とも書かれます.コマンドパス,コマンドサーチパスも,同じ意味です.man zshbuiltinsを実行したところ,whenceコマンドの説明の中に『-a Do a search for all occurrences of name throughout the command path.』という記述がありました.Googleで"search path","command path","command search path"とそれぞれのカタカナ書きの検索結果を見比べ,「サーチパス」という用語を採用しました.昨日のエントリの「コマンドサーチパス」は,そのままにしておきます.

*2:http://x68000.q-e-d.net/~68user/unix/pickup?rehash

*3:バージョンを知ったら,次は「--help」です.python --helpを実行すると,pythonコマンドにどんなオプションが使用可能かを知ることができます.