blog.textfile.org結城浩のブログ

blog.textfile.org

「このプロジェクトはこのディレクトリで作業する」を指定するコマンド

前提

  • シェルで作業している。
  • 複数のプロジェクトに関わっている。

問題

  • このプロジェクトはこのディレクトリ、あのプロジェクトはあのディレクトリと移動するのがめんどうである。

解法

  • プロジェクトの名前をつけた「コマンド」を用意し、そのコマンドを入力すると目的のディレクトリに移動するようにする。
  • さらにその「プロジェクトの名前をつけたコマンド」を自動生成するコマンド here を用意する。

詳細

  • 以下は Mac OS X および bash 用である。

  • 以下のスクリプト here を設置する。 このスクリプトは解法で述べた「コマンド」をaliasとして実現する。 aliasの一覧は~/.hereに格納される。

here
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env ruby

ALIAS_FILE = '$HOME/.here'

if ARGV.length != 1
  puts "Usage: here project-code"
  puts "Example: here math"
  puts
  puts "pwd is clipped."
  system("pwd | pbcopy")
  abort
end

PROJECT_CODE = ARGV[0]
CMDLINE = "alias #{PROJECT_CODE}='pushd #{Dir.pwd}'"
# CMDLINE = "alias #{PROJECT_CODE}='pushd #{Dir.pwd}; show_todo'"
File::open(ALIAS_FILE, "a+") do |f|
  f.puts(CMDLINE)
end

puts "#{ALIAS_FILE} is updated.\n#{CMDLINE}"
system("echo source ~/.here | pbcopy")
puts "Execute Command+V on the command line to execute \"source ~/.here\""
  • ~/.bash_profile~/.bashrc などに source ~/.here を入れておく。

  • プロジェクトの作業ディレクトリにcdpushdで移動する。

  • プロジェクトの名前がたとえば math だとすると here math を実行する。

  • source ~/.here を実行してaliasを更新する。Command+V でペーストしてもいい。

  • 他のディレクトリに移動する。

  • コマンドラインからmathと入力すると、先ほどのプロジェクトの作業ディレクトリに移動する。