How to improve cd
The cd
command is probably one of the most used Unix commands. It's intent is very straight forward: change to the directory given, or $HOME
, if none is given. So what's wrong with it? Well, if you pass it a non-directory file, it just complains:
% cd org/wxwindows/wxValidator.java cd: not a directory: org/wxwindows/wxValidator.java
That seems pretty straight forward, since it cannot possibly change directories to a file. I've thought it would be better if cd
would change to the directory of the file, in this case org/wxwindows
, rather than error.
Maybe I find this so useful because I've been doing so much Java lately. This modified cd
makes it easy to grep
and change directories, without having to manually delete the filename. I've also found this handy when using output from the locate
or rpm -ql
commands.
Anyhow, here's the zsh
code:
cd_improved () { if (( ${#argv} == 0 )); then cd return fi local dir=$1 if [[ -f $dir ]]; then file=$dir:t echo "Ignoring: $file" dir=$dir:h fi cd "$dir" } alias cd='cd_improved'