FreeBSD Manual Pages
ondir(1) Shell utility ondir(1) NAME ondir - automatically execute scripts when traversing directories at the command line SYNPOSIS ondir <old-directory> [<new-directory>] DESCRIPTION NOTE: The 0.2.x series has been completely rewritten in C. In addition, the configuration file format is substantially different. ondir is a program that executes a script when entering or leaving a direc- tory. It also executes all scripts in the intermediate directories between the two. For example, when changing from /opt/music to /home, leave scripts for /opt/music and /opt are executed, then the enter script for /home is exe- cuted. The scripts are defined in either the system-wide rc file (/etc/ondirrc) or per user rc files (~/.ondirrc). The way ondir works is by using auxiliary scripts that override shell builtins (cd, pushd and popd in BASH) to execute ondir whenever a user changes directory. These scripts are included in the section SCRIPTS, be- low. The scripts are available in the source tarball and are called scripts.sh, scripts.tcsh for Bourne shell variants and TCSH, respectively. OPTIONS <old-directory> The last directory you were in, after having changed to the new di- rectory. [<new-directory>] The current directory. This is optional, but can be useful when tra- versing symbolically linked paths, as it will use the logical path rather than the physical path. If left out, ondir uses getcwd(). CONFIGURATION The configuration files /etc/ondirrc and ~/.ondirrc are in the form: # Comment [final] enter <path>[:<path>[:...]] <shell script body> [final] leave <path>[:<path>[:...]] <shell script body> Any line with leading whitespace is assumed to belong to the last valid en- ter or leave section. final indicates that the section will be the last one executed for the matching directory. Directories further down the hierarchy will still be matched. <path> is the path to match. Regular expression support has been included since version 0.2.1 thanks to Arvind (?). A path must match completely to be considered a match. Because : is the path delimiter, it can not be used in any regular expressions. Arvind also re-added (from version 0.1.x) support for $ONDIRWD expansion. This environment variable will contain the directory currently being tra- versed. A perfect example of the usefulness of this program is a users public_html directory. I personally set my default umask to 077, but when editing in my pub- lic_html directory I want my umask to be 022. To do this automatically, I would have add the following to my ~/.ondirrc ~/.ondirrc enter /home/athomas/public_html umask 022 leave /home/athomas/public_html umask 077 Another good example is if you have a "bin" directory in a project, but don't want to add it permanently to your PATH. The following ondir scripts take care of that: ~/.ondirrc enter /home/athomas/projects/myproject PATH=$PATH:$CWD/bin leave /home/athomas/projects/myproject PATH=`echo $PATH | sed -e "s,:$CWD/bin,,g"` SCRIPTS The BASH script you should add to your profile is: cd() { builtin cd "$@" && eval "`ondir \"$OLDPWD\" \"$PWD\"`" } pushd() { builtin pushd "$@" && eval "`ondir \"$OLDPWD\" \"$PWD\"`" } popd() { builtin popd "$@" && eval "`ondir \"$OLDPWD\" \"$PWD\"`" } eval "`ondir /`" The TCSH script you should add to your profile is: alias cwdcmd eval \`ondir \$owd \$cwd\` # Run ondir on login eval `ondir /` AUTHORS Alec Thomas <alec@swapoff.org> SEE ALSO devtodo(1) <http://swapoff.org/DevTodo> NOTES ondir also has the ability to execute scripts in the directories being tra- versed. These scripts are named .onenter and .onleave. This ability is dis- abled by default, but can be enabled by editing conf.h and uncommenting: #define USE_ONENTERLEAVE Alec Thomas 0.2.3 ondir(1)
NAME | SYNPOSIS | DESCRIPTION | OPTIONS | CONFIGURATION | SCRIPTS | AUTHORS | SEE ALSO | NOTES
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ondir&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>
