Shell script help needed
Dan "1461 days of Bush is 1462 too many..." Smith
daniel at island.uu.net
Thu Nov 24 03:27:21 AEST 1988
In article <1872 at loral.UUCP> jlh at loral.UUCP (Physically Pffft) writes:
>Our application has it's source code in 9 directories, and I find that
>often I need to make similar changes in all 9 directories. Manually
>cd'ing into each directory is error prone, some are skipped and others
>are entered more than once. I'd like to write a shell script to automate
I deal with this every single day! :-)
Here's my strategy/tutorial:
use foreach to pushd all of the directories in a tree
[optionally set up a label]
do whatever needs to be done the directory
pop the directory
[optionally goto the label]
so from csh you could have: (skip RCS directories)
% foreach i (`find -name RCS -prune -o -type d -print`)
? pushd $i
? end
to push all all of the directories in a tree...be careful
with $cdpath, or you may not get what you want...
How I usually do it...
I have an alias called "fed" (foreach directory) that sources
a script via:
alias fed 'source ~$misc_bin_person/bin/ptree'
and here is "ptree" (pushd tree)
----
# note, this must be sourced...
set savecdpath=($cdpath)
set cdpath=( . .. ../.. ../../.. ../../../../..)
echo -n looking at directories...
foreach i (`find -name RCS -prune -o -type d -print`)
p $i
end
set cdpath=($savecdpath)
unset savecdpath
----
...and here are my relevant cd/pushd/popd aliases:
-----
#
# aliases for setting the prompt and getting around
#
# fillstr is a var used in prompt, contains "(level)" when dirs are pushed
set fillstr=""
set end=":-)"
alias prompt_set 'set prompt_head=$cwd:h;set prompt="\! $HOST"":$prompt_head:t/$cwd:t$fillstr $end "'
alias cd 'set old=$cwd; chdir \!*; prompt_set; if -e .locrc source .locrc'
alias dir_number 'set fillstr; set dnum=`dirs`; shift dnum; if ($#dnum >= 1) set fillstr=" ($#dnum)"'
alias p 'set o2=$cwd; pushd \!* > /dev/null; set pdirs=`dirs`; echo $pdirs:gt; set old=$o2; dir_number; prompt_set'
alias pp 'set o2=$cwd; popd; set old=$o2; dir_number; prompt_set'
alias fed 'source ~$misc_bin_person/bin/ptree'
-----
Now...getting back to handling a tree, I go up to the root
directory of a product and type "fed". All of the directories
get pushed, and the prompt indicates how many levels down I am.
If I'm going to do something fairly repetitive, I may set up
a label via:
% foo:
and then do whatever I need... then to pop directories
I enter "pp", and my prompt changes to reflect where I am and how
many directories deep... If I had set a label, I could say something
like "goto foo" (note, no colon), and things will pretty much run
themselves until all of the directories are popped. I take advantage
of the fact that it is an error to not have a directory to pop
to; that ends the loop.
Hope this helps you and others that work with projects that
have many directories/levels.
dan
--
DanSmith IslandGraphics 4000CivicCenterDr SanRafael MarinCo CA 94903 4154911000
415 332 FAST(h) 491 0402(Fax)|d: Nobodys' fault but mine| UnixFeastsMusicFilm
daniel at island.uu.net unicom!daniel at pacbell.com {lll-crg,apple}!well!dansmith
More information about the Comp.unix.wizards
mailing list