⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch21_03.htm

📁 the unix power tools
💻 HTM
字号:
<HTML><!--Distributed by F --><HEAD><TITLE>[Chapter 21] 21.3 Unique Names for Temporary Files </TITLE><METANAME="DC.title"CONTENT="UNIX Power Tools"><METANAME="DC.creator"CONTENT="Jerry Peek, Tim O'Reilly &amp; Mike Loukides"><METANAME="DC.publisher"CONTENT="O'Reilly &amp; Associates, Inc."><METANAME="DC.date"CONTENT="1998-08-04T21:40:00Z"><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="ch21_01.htm"TITLE="21. More About Managing Files"><LINKREL="prev"HREF="ch21_02.htm"TITLE="21.2 A Better Place for Temporary Files: /tmp "><LINKREL="next"HREF="ch21_04.htm"TITLE="21.4 Why Both /tmp and /usr/tmp? "></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="ch21_02.htm"TITLE="21.2 A Better Place for Temporary Files: /tmp "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 21.2 A Better Place for Temporary Files: /tmp "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1">Chapter 21<BR>More About Managing Files</FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch21_04.htm"TITLE="21.4 Why Both /tmp and /usr/tmp? "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 21.4 Why Both /tmp and /usr/tmp? "BORDER="0"></A></TD></TR></TABLE>&nbsp;<HRALIGN="LEFT"WIDTH="515"TITLE="footer"></DIV><DIVCLASS="SECT1"><H2CLASS="sect1"><ACLASS="title"NAME="UPT-ART-5180">21.3 Unique Names for Temporary Files </A></H2><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-22965"></A><ACLASS="indexterm"NAME="AUTOID-22968"></A><ACLASS="indexterm"NAME="AUTOID-22972"></A>All users share <SPANCLASS="link"><EMCLASS="emphasis">/tmp</EM> (<ACLASS="linkend"HREF="ch21_02.htm"TITLE="A Better Place for Temporary Files: /tmp ">21.2</A>)</SPAN>,so you should make unique filenames there.The best way to do this is by putting <CODECLASS="literal">$$</CODE> in the filename.For example:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">% <CODECLASS="userinput"><B>vi /tmp/jerry.$$</B></CODE>&quot;/tmp/jerry.12345&quot; [New file]% <CODECLASS="userinput"><B>lpr /tmp/jerry.$$</B></CODE>% <CODECLASS="userinput"><B>rm /tmp/jerry.$$</B></CODE></PRE></BLOCKQUOTE></P><PCLASS="para">The shell replaces <CODECLASS="literal">$$</CODE> with the shell's<SPANCLASS="link">PID number (<ACLASS="linkend"HREF="ch38_03.htm"TITLE="Managing Processes: Overall Concepts ">38.3</A>)</SPAN>(in this case, <CODECLASS="literal">12345</CODE>).</P><PCLASS="para">If you use a<SPANCLASS="link">subshell (<ACLASS="linkend"HREF="ch38_04.htm"TITLE="Subshells ">38.4</A>)</SPAN>,or have more than one login session or window,and want to share the same temp file, <CODECLASS="literal">$$</CODE> won't work for you.In that case, just pick a unique name.You could use today's date instead.</P><PCLASS="para">To give yourself both options with a minimum of work,here are lines for your<SPANCLASS="link">shell setup files (<ACLASS="linkend"HREF="ch02_02.htm"TITLE="Shell Setup Files-Which, Where, and Why ">2.2</A>)</SPAN>.The left column has lines for <EMCLASS="emphasis">csh</EM>-like shells, and theright is for <EMCLASS="emphasis">sh</EM>-like shells.&#13;</P><PCLASS="para"><TABLECLASS="screen.co"BORDER="1"><TR><THVALIGN="TOP"><PRECLASS="calloutlist">&#13;<ACLASS="co"HREF="ch09_16.htm"TITLE="9.16 Command Substitution ">`...`</A> <ACLASS="co"HREF="ch47_05.htm"TITLE="47.5 Using C Shell Arrays ">[n]</A> </PRE></TH><TDVALIGN="TOP"><PRECLASS="screen"><EMCLASS="emphasis">.cshrc:</EM>		<EMCLASS="emphasis">.profile</EM>:set tf=/tmp/jp$$	tf=/tmp/jp$$<EMCLASS="emphasis">.login:</EM>		export TFset date = (`date`)	set `date`setenv TF /tmp/jp$date[4]	TF=/tmp/jp$4</PRE></TD></TR></TABLE></P><PCLASS="para">&#13;(The last two lines grab the fourth word&nbsp;- the current time&nbsp;- from theoutput of the<SPANCLASS="link"><EMCLASS="emphasis">date</EM> (<ACLASS="linkend"HREF="ch51_10.htm"TITLE="The date Command ">51.10</A>)</SPAN>command.)When I want a temporary file in my current shell, I type:&#13;</P><PCLASS="para"><TABLECLASS="screen.co"BORDER="1"><TR><THVALIGN="TOP"><PRECLASS="calloutlist">&#13;<ACLASS="co"HREF="ch15_02.htm"TITLE="15.2 Filename Wildcards in a Nutshell ">*</A> </PRE></TH><TDVALIGN="TOP"><PRECLASS="screen">% <CODECLASS="userinput"><B>grep foo bar &gt; $tf-1</B></CODE>% <CODECLASS="userinput"><B>grep wheeze bar &gt; $tf-2</B></CODE>% <CODECLASS="userinput"><B>more $tf-*</B></CODE></PRE></TD></TR></TABLE></P><PCLASS="para">&#13;The shell expands the<SPANCLASS="link">shell variable (<ACLASS="linkend"HREF="ch06_08.htm"TITLE="Shell Variables ">6.8</A>)</SPAN><CODECLASS="literal">$tf-1</CODE> into a filename like <CODECLASS="literal">/tmp/jp2345-1</CODE>, and<CODECLASS="literal">$tf-*</CODE> expands into all my temporary files in this shell.Usually, that's great.  But if I go to a subshell, do a shell escape,and so on, the temporary files I make with <CODECLASS="literal">$tf</CODE> won't be thesame as the ones I make in my login shell because the PIDs aredifferent.  If I need them to be the same, I use <CODECLASS="literal">$TF</CODE>, the<SPANCLASS="link">environment variable (<ACLASS="linkend"HREF="ch06_01.htm#UPT-ART-1170"TITLE="What Environment Variables Are Good For ">6.1</A>)</SPAN>.It's set to the time I logged in.And because environment variables are passed to child shells, the name(like <EMCLASS="emphasis">/tmp/jp09:34:56</EM>) will be the same in subshells:&#13;</P><PCLASS="para"><TABLECLASS="screen.co"BORDER="1"><TR><THVALIGN="TOP"><PRECLASS="calloutlist">&#13;<ACLASS="co"HREF="ch15_02.htm"TITLE="15.2 Filename Wildcards in a Nutshell ">[..]</A> </PRE></TH><TDVALIGN="TOP"><PRECLASS="screen">% <CODECLASS="userinput"><B>someprog &gt; $TF-1</B></CODE>...% <CODECLASS="userinput"><B>otherprog &gt; $TF-6</B></CODE>% <CODECLASS="userinput"><B>sh</B></CODE>$ <CODECLASS="userinput"><B>head $TF-[16]</B></CODE></PRE></TD></TR></TABLE></P><PCLASS="para">&#13;If I'll be using a file for more than a minute or two, I might forgetwhat's in which file.So I leave myself a note in shell variables named <CODECLASS="literal">xf</CODE><CODECLASS="replaceable"><I>n</I></CODE>and environment variables named <CODECLASS="literal">XF</CODE><CODECLASS="replaceable"><I>n</I></CODE>-where &quot;xf&quot; means&quot;explain file&quot; and <CODECLASS="replaceable"><I>n</I></CODE> is<EMCLASS="emphasis">1</EM>, <EMCLASS="emphasis">2</EM>, etc. to correspond to the variable.If I don't remember which have what, I get a list by piping the output of<EMCLASS="emphasis">set</EM> (for shell variables) or<SPANCLASS="link"><EMCLASS="emphasis">printenv</EM> or <EMCLASS="emphasis">env</EM> (<ACLASS="linkend"HREF="ch06_01.htm#UPT-ART-1170"TITLE="What Environment Variables Are Good For ">6.1</A>)</SPAN>(for environment variables) through <EMCLASS="emphasis">grep</EM>.For example:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">% <CODECLASS="userinput"><B>sort -t: +2 $tf-2 &gt; $tf-3</B></CODE>% <CODECLASS="userinput"><B>set xf3='sorted list of chapter 21 files'</B></CODE>   <ICLASS="lineannotation">...later...</I>% <CODECLASS="userinput"><B>set | grep xf</B></CODE>xf1     sorted list of chapter 20 filesxf3     sorted list of chapter 21 files% <CODECLASS="userinput"><B>lpr $tf-3</B></CODE></PRE></BLOCKQUOTE></P><TABLECLASS="para.programreference"BORDER="1"><TR><THVALIGN="TOP"><ACLASS="programreference"HREF="examples/index.htm"TITLE="csh_logout">csh_logout</A><BR><ACLASS="programreference"HREF="examples/index.htm"TITLE="sh_logout">sh_logout</A><BR></TH><TDVALIGN="TOP">&#13;To clean up when I log out, I added the lines that follow to the C shell<EMCLASS="emphasis">.logout</EM> file.The Bourne shell version is similar, but it needs a couple of tricksto work on some shells; it's on the CD-ROM.</TD></TR></TABLE><PCLASS="para"><TABLECLASS="screen.co"BORDER="1"><TR><THVALIGN="TOP"><PRECLASS="calloutlist">&#13;<ACLASS="co"HREF="ch15_04.htm"TITLE="15.4 What if a Wildcard Doesn't Match? ">nonomatch</A> <ACLASS="co"HREF="ch16_08.htm"TITLE="16.8 The ls -d Option ">-d</A> <ACLASS="co"HREF="ch13_05.htm"TITLE="13.5 Redirection in C Shell: Capture Errors, Too? ">|&amp;</A> <ACLASS="co"HREF="ch09_11.htm"TITLE="9.11 Repeating a Command with a foreach Loop ">$&lt;</A> <ACLASS="co"HREF="ch47_04.htm"TITLE="47.4 C Shell Variable Operators and Expressions ">=~</A> &#13;</PRE></TH><TDVALIGN="TOP"><PRECLASS="screen"># CLEAN FILES (IF ANY) OUT OF /tmp:set nonomatchset tmpf=&quot;\`ls -d $tf-* $TF-* |&amp; grep -v ' not found'\`&quot;if ( &quot;$tmpf&quot; =~ ?* ) then    echo; echo &quot;Your files in /tmp:&quot;    ls -d $tmpf    echo -n &quot;'rm -rf' them? [ny](n) &quot;    if ( &quot;$&lt;&quot; =~ y* ) rm -rf $tmpfendif</PRE></TD></TR></TABLE></P><PCLASS="para">If I made any temporary files from my login shell or any subshells,I get this message when I log out:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">% <CODECLASS="userinput"><B>logout</B></CODE>Your files in /tmp:/tmp/jp2345-1   /tmp/jp2345-2  /tmp/jp2748-1  /tmp/09:23:45-1'rm -rf' them? <CODECLASS="userinput"><B>y</B></CODE></PRE></BLOCKQUOTE></P><PCLASS="para">Another way to do this is with a script like<SPANCLASS="link"><EMCLASS="emphasis">del</EM> (<ACLASS="linkend"HREF="ch23_06.htm"TITLE="A Faster Way to Remove Files Interactively ">23.6</A>)</SPAN>.</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="ch21_02.htm"TITLE="21.2 A Better Place for Temporary Files: /tmp "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 21.2 A Better Place for Temporary Files: /tmp "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="SECT1"HREF="ch21_04.htm"TITLE="21.4 Why Both /tmp and /usr/tmp? "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 21.4 Why Both /tmp and /usr/tmp? "BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172">21.2 A Better Place for Temporary Files: /tmp </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">21.4 Why Both /tmp and /usr/tmp? </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 &amp; 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 + -