📄 ch14_14.htm
字号:
<HTML><!--Distributed by F --><HEAD><TITLE>[Chapter 14] 14.14 Automatic Setup When You Enter/Exit a Directory </TITLE><METANAME="DC.title"CONTENT="UNIX Power Tools"><METANAME="DC.creator"CONTENT="Jerry Peek, Tim O'Reilly & Mike Loukides"><METANAME="DC.publisher"CONTENT="O'Reilly & Associates, Inc."><METANAME="DC.date"CONTENT="1998-08-04T21:37:14Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-260-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch14_01.htm"TITLE="14. Moving Around in a Hurry"><LINKREL="prev"HREF="ch14_13.htm"TITLE="14.13 Which Directory Am I in, Really? "><LINKREL="next"HREF="ch15_01.htm"TITLE="15. Wildcards"></HEAD><BODYBGCOLOR="#FFFFFF"TEXT="#000000"><DIVCLASS="htmlnav"><H1><IMGSRC="gifs/smbanner.gif"ALT="UNIX Power Tools"USEMAP="#srchmap"BORDER="0"></H1><MAPNAME="srchmap"><AREASHAPE="RECT"COORDS="0,0,466,58"HREF="index.htm"ALT="UNIX Power Tools"><AREASHAPE="RECT"COORDS="467,0,514,18"HREF="jobjects/fsearch.htm"ALT="Search this book"></MAP><TABLEWIDTH="515"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch14_13.htm"TITLE="14.13 Which Directory Am I in, Really? "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 14.13 Which Directory Am I in, Really? "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1">Chapter 14<BR>Moving Around in a Hurry</FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="CHAPTER"HREF="ch15_01.htm"TITLE="15. Wildcards"><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 15. Wildcards"BORDER="0"></A></TD></TR></TABLE> <HRALIGN="LEFT"WIDTH="515"TITLE="footer"></DIV><DIVCLASS="SECT1"><H2CLASS="sect1"><ACLASS="title"NAME="UPT-ART-0243">14.14 Automatic Setup When You Enter/Exit a Directory </A></H2><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-15863"></A><ACLASS="indexterm"NAME="AUTOID-15866"></A>If you work in a lot of different directories, here's a way to make theshell do automatic setup when you enter a directory or cleanup as you leave.We've broken it onto two lines for printing; enter it as one line.On <EMCLASS="emphasis">bash</EM>, make a shell function instead; there's also a Korn shellversion on the disc:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen"> alias cd 'if (-o .exit.csh) source .exit.csh; chdir \!*; if (-o .enter.csh) source .enter.csh'cd() { test -r .exit.sh && . .exit.sh builtin cd "$1" # builtin is a bash command test -r .enter.sh && . .enter.sh}</PRE></BLOCKQUOTE></P><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-15875"></A><ACLASS="indexterm"NAME="AUTOID-15877"></A>Then create <EMCLASS="emphasis">.enter.csh</EM> and/or <EMCLASS="emphasis">.exit.csh</EM> filesin the directories whereyou want a custom setup.Bourne-type shell users, make <EMCLASS="emphasis">.enter.sh</EM> and/or <EMCLASS="emphasis">.exit.sh</EM>files instead.When you <EMCLASS="emphasis">cd</EM> to a new directory, an <EMCLASS="emphasis">.exit</EM> file is<SPANCLASS="link"><EMCLASS="emphasis">source</EM>d (<ACLASS="linkend"HREF="ch44_23.htm"TITLE="Reading Files with the . and source Commands ">44.23</A>)</SPAN>into your current shellbefore you leave the old directory.As you enter the new directory, an <EMCLASS="emphasis">.enter</EM> file will be read if it exists.If you use<ACLASS="indexterm"NAME="AUTOID-15888"></A><ACLASS="indexterm"NAME="AUTOID-15890"></A><SPANCLASS="link"><EMCLASS="emphasis">pushd</EM> and <EMCLASS="emphasis">popd</EM> (<ACLASS="linkend"HREF="ch14_06.htm"TITLE="The Shells' pushd and popd Commands ">14.6</A>)</SPAN>,you'll probably want to make the samekind of aliases or functions for them.</P><PCLASS="para">The C shell alias tests to be sure you own the files;this helps to stop other usersfrom leaving surprises for you!But if lots of users will be sharing the directory, they may all want toshare the same files - in that case, replace the <EMCLASS="emphasis"> - o</EM> tests with<EMCLASS="emphasis">-r</EM> (true if the file is readable).Article<ACLASS="xref"HREF="ch47_04.htm"TITLE="C Shell Variable Operators and Expressions ">47.4</A>describes C shell tests like <EMCLASS="emphasis">-o</EM>;in <EMCLASS="emphasis">sh</EM>-like shells, use<SPANCLASS="link"><EMCLASS="emphasis">test</EM> (<ACLASS="linkend"HREF="ch44_20.htm"TITLE="test: Testing Files and Strings ">44.20</A>)</SPAN>(the <EMCLASS="emphasis">bash</EM> ownership <EMCLASS="emphasis">test</EM> operator is <CODECLASS="literal">-O</CODE>).</P><PCLASS="para">Here's a sample <EMCLASS="emphasis">.enter.csh</EM> file:</P><PCLASS="para"><TABLECLASS="screen.co"BORDER="1"><TR><THVALIGN="TOP"><PRECLASS="calloutlist"> <ACLASS="co"HREF="ch22_04.htm"TITLE="22.4 Setting an Exact umask ">umask</A> </PRE></TH><TDVALIGN="TOP"><PRECLASS="screen"># Save previous umask; reset in .exit.csh:set prevumask=`umask`# Let everyone in the group edit my files here:umask 002echo ".enter.csh: setting umask to 002"# Prompt (with blank line before) to keep me awake:set prompt="\$cwd - PROJECT DEVELOPMENT DIRECTORY. EDIT CAREFULLY...\% "</PRE></TD></TR></TABLE></P><PCLASS="para"> and the <EMCLASS="emphasis">.exit.csh</EM> to go with it:</P><PCLASS="para"><TABLECLASS="screen.co"BORDER="1"><TR><THVALIGN="TOP"><PRECLASS="calloutlist"> <ACLASS="co"HREF="ch47_03.htm"TITLE="47.3 Conditional Statements with if ">if</A> <ACLASS="co"HREF="ch47_04.htm"TITLE="47.4 C Shell Variable Operators and Expressions ">$?</A> <ACLASS="co"HREF="ch07_05.htm"TITLE="7.5 Multiline Shell Prompts ">setprompt</A> </PRE></TH><TDVALIGN="TOP"><PRECLASS="screen"># .enter.csh file may put old umask in shell variable:if ($?prevumask) then umask $prevumask echo ".exit.csh: setting umask to $prevumask" unset prevumaskendif# Reminder to come back here if need to:echo "If you didn't check in the RCS files, type 'cd $cwd'."# Set generic prompt (setprompt alias comes from .cshrc file):setprompt</PRE></TD></TR></TABLE></P><BLOCKQUOTECLASS="note"><PCLASS="para"><STRONG>NOTE:</STRONG> <ACLASS="indexterm"NAME="AUTOID-15924"></A><ACLASS="indexterm"NAME="AUTOID-15927"></A><ACLASS="indexterm"NAME="AUTOID-15929"></A><ACLASS="indexterm"NAME="AUTOID-15932"></A><ACLASS="indexterm"NAME="AUTOID-15935"></A>The <EMCLASS="emphasis">umask</EM> set in the <EMCLASS="emphasis">.enter</EM> file for some directory will also setthe permissions for files you create in other directories with commandsthat use pathnames - like<CODECLASS="literal">vi</CODE> <CODECLASS="literal">/</CODE><CODECLASS="replaceable"><I>somedir</I></CODE><CODECLASS="literal">/</CODE><CODECLASS="replaceable"><I>somefile</I></CODE>.</P></BLOCKQUOTE><PCLASS="para">Can more than one of your directories use the same <EMCLASS="emphasis">.enter</EM> or <EMCLASS="emphasis">.exit</EM>file?<ACLASS="indexterm"NAME="AUTOID-15948"></A><ACLASS="indexterm"NAME="AUTOID-15950"></A><ACLASS="indexterm"NAME="AUTOID-15953"></A>If they can, you'll save disk space and redundant editing by making<SPANCLASS="link">hard links (<ACLASS="linkend"HREF="ch18_04.htm"TITLE="More About Links ">18.4</A>)</SPAN>between the files.If the directories are on different filesystems, you'll have to use a<SPANCLASS="link">symbolic link (<ACLASS="linkend"HREF="ch18_04.htm"TITLE="More About Links ">18.4</A>)</SPAN>-though that probably won't save disk space.If you link the files, you should probably add a comment that remindsyou of the links when you make your next edit.When your <EMCLASS="emphasis">.enter</EM> files get really long, you might be able to put acommand like this in them:</P><PCLASS="para"><TABLECLASS="screen.co"BORDER="1"><TR><THVALIGN="TOP"><PRECLASS="calloutlist"><ACLASS="co"HREF="ch44_23.htm"TITLE="44.23 Reading Files with the . and source Commands ">source</A> </PRE></TH><TDVALIGN="TOP"><PRECLASS="screen">source ~/.global_enter</PRE></TD></TR></TABLE></P><PCLASS="para">where the <EMCLASS="emphasis">.global_enter</EM> file in your home directory has aprocedure that you want to run from a lot of your <EMCLASS="emphasis">.enter</EM> files.(Same goes for <EMCLASS="emphasis">.exit</EM>, of course.)</P><PCLASS="para">One last idea: if a lot of users share the same directory, they can makefiles with names like <EMCLASS="emphasis">.enter.joanne</EM>, <EMCLASS="emphasis">.exit.allan</EM>, and so on.Your aliases can test for a file named<CODECLASS="literal">.enter.</CODE><SPANCLASS="link"><CODECLASS="literal">$user</CODE> (<ACLASS="linkend"HREF="ch06_09.htm"TITLE="Special C Shell Variables ">6.9</A>)</SPAN>(if your UNIX has a 14-character filenamelimit, you'll need a shorter name).</P><DIVCLASS="sect1info"><PCLASS="SECT1INFO">- <SPANCLASS="authorinitials">JP</SPAN></P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><TABLEWIDTH="515"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch14_13.htm"TITLE="14.13 Which Directory Am I in, Really? "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 14.13 Which Directory Am I in, Really? "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="book"HREF="index.htm"TITLE="UNIX Power Tools"><IMGSRC="gifs/txthome.gif"SRC="gifs/txthome.gif"ALT="UNIX Power Tools"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="CHAPTER"HREF="ch15_01.htm"TITLE="15. Wildcards"><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 15. Wildcards"BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172">14.13 Which Directory Am I in, Really? </TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="index"HREF="index/idx_0.htm"TITLE="Book Index"><IMGSRC="gifs/index.gif"SRC="gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172">15. Wildcards</TD></TR></TABLE><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><IMGSRC="gifs/smnavbar.gif"SRC="gifs/smnavbar.gif"USEMAP="#map"BORDER="0"ALT="The UNIX CD Bookshelf Navigation"><MAPNAME="map"><AREASHAPE="RECT"COORDS="0,0,73,21"HREF="../index.htm"ALT="The UNIX CD Bookshelf"><AREASHAPE="RECT"COORDS="74,0,163,21"HREF="index.htm"ALT="UNIX Power Tools"><AREASHAPE="RECT"COORDS="164,0,257,21"HREF="../unixnut/index.htm"ALT="UNIX in a Nutshell"><AREASHAPE="RECT"COORDS="258,0,321,21"HREF="../vi/index.htm"ALT="Learning the vi Editor"><AREASHAPE="RECT"COORDS="322,0,378,21"HREF="../sedawk/index.htm"ALT="sed & awk"><AREASHAPE="RECT"COORDS="379,0,438,21"HREF="../ksh/index.htm"ALT="Learning the Korn Shell"><AREASHAPE="RECT"COORDS="439,0,514,21"HREF="../lrnunix/index.htm"ALT="Learning the UNIX Operating System"></MAP></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -