I have a common use case that I'd like to write a function for: I often want to cd to some directory relative to some file.
My current workflow looks like this:
$ gem which rspec/core | xargs echo -n | pbcopy
$ cd *paste and delete end until direcory looks right*
note: gem which rspec/core
prints something like "/Users/joshcheek/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.10.0/lib/rspec/core.rb"
I'd like it to look like this:
$ gem which rspec/core | 2dir 3
Which will cd me into "/Users/joshcheek/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.10.0" (passing the argument "3" tells it to remove "lib/rspec/core.rb" from the end)
This is the best I've gotten so far:
2dir() {
read dir
for i in $(seq 1 $1)
do
dir="${dir%/*}"
done
cd "$dir"
}
But the cd changes the function's directory, not mine. I've tried swapping it with an alias, but can't figure out how to make anonymous functions or pass the argument.