BBSˮľÇ廪վ¡Ã¾«»ªÇø

·¢ÐÅÈË: wshu (Ê÷ÉϵÄÀÏ»¢), ÐÅÇø: Unix 
±ê  Ìâ: UNIX FAQ ÖÐÎİæ(¶þ) 
·¢ÐÅÕ¾: BBS Ë®Ä¾Ç廪վ (Mon May 19 10:01:13 1997) 
 
 
±¾ÆªÎÄÕ»شðÒÔÏÂÎÊÌâ: 
  
         2.1)  ÎÒÒªÔõôɾ³ýÒÔ '-' ×ÖÔª¿ªÍ·ÎªµµÃûµÄµµ°¸£¿ 
         2.2)  ÎÒÒªÔõÑù²ÅÄܰѵµÃûµ±Öк¬ÓÐÌØÊâ×ÖÔªµÄµµ°¸É¾³ý£¿ 
         2.3)  ÎÒÒªÈçºÎÁгöÕû¸öĿ¼Ê÷ÄØ? 
         2.4)  ÒªÔõôÉ趨 prompt ²Å»áÏÔʾ³öĿǰËùÔÚµÄĿ¼£¿ 
         2.5)  µ±ÎÒÔÚд shell script Ê±£¬ÒªÈçºÎ´Ó terminal ¶ÁÈë×ÖÔª£¿ 
         2.6)  ÔõôÑù°Ñ "*.foo" ¸ÄÃûΪ "*.bar" ÄØ£¿ÔõÑù°Ñµµ°¸Ãû³Æ¸Ä³ÉÐ¡Ð´ÄØ£¿ 
         2.7)  ÎªÊ²Ã´ÎÒÓà"rsh host command" »áÓÐÒ»Ð©Ææ¹ÖµÄѶϢ³öÏÖ£¿ 
         2.8)  ÎÒÒªÔõÒªÓóÌʽ»òÕßÊÇ shell script ÖÐÉ趨ĿǰËùÓõĠshell µÄ»·¾³ 
         2.9)  ÎÒÒªÈçºÎ½« csh µÄ stdout Óë stderr µ¼Ïòµ½²»Í¬µÄØ·½ÄØ£¿ 
         2.10) ÎÒÈçºÎÔÚ .cshrc ÖÐÅжÏÊÇ·ñÔÚ login shell ÖУ¿ 
         2.11) ÔÚ shell ÖÐÒªÓÃÔõÑùµÄ pattern À´±íʾ³ýÁË "." Óë ".." ÍâµÄËùÓеµ 
         2.12) ÔÚ Bourne shell script ÀïÒªÔõôÕÒ³ö×îºóÒ»¸ö²ÎÊý£¿ 
         2.13) ÎªÊ²Ã´ÓÐÈË˵ $PATH Àï²»¿ÉÒÔ·Å '.' ÄØ£¿ 
         2.14) ÔÚ shell script ÖÐÒªÔõôÈÃÖÕ¶Ë»ú·¢³öÉùÒôÄØ£¿ 
         2.15) ÎªÊ²Ã´ÎÒ²»ÄÜÓà"talk" ÓëÎÒÔÚij»úÆ÷ÉϵÄÅóÓѽ»Ì¸ÄØ£¿ 
         2.16) ÎªÊ²Ã´ÎÒÔÂÀúÊÇ´íµÄ£¿ 
  
 2.1)    ÎÒÒªÔõôɾ³ýÒÔ '-' ×ÖÔª¿ªÍ·ÎªµµÃûµÄµµ°¸£¿ 
  
         ÕÒÒ»¸ö·½·¨Èõµ°¸Ãû³Æ¿ªÍ·²»ÒªÊÇ '-' ¾Í¿ÉÒÔÁË£¬×î¼òµ¥µÄ·½·¨¾ÍÊÇʹÓà
  
                 rm ./-filename 
  
         (µ±È»£¬ÎÒÃǼÙÉè "-filename" Î»ÓÚĿǰµÄĿ¼)¡£Õâ¸ö·½·¨¿ÉÒÔ±ÜÃâÈÃÆä 
         ËûÖ¸Áî½âÊÍ "-"¡£ 
  
         ÓÐÐí¶àÖ¸Áî£¬ÌØ±ðÊǺô½Ð "getopt(3)" µÄ²ÎÊýÆÊÎö³£Ê½µÄ³Ìʽ£¬»á½ÓÊÜÒ» 
         ¸ö "--" µÄ²ÎÊý£¬´ú±í¡¸ÕâÊÇ×îºóÒ»¸öÑ¡Ï£¬´Ëºó³öÏÖµÄÏîÄ¿¶¼²»ÔÙÊÇÑ¡ 
         ÏÒò´ËÄúµÄ rm ¿ÉÄÜ»á½ÓÊÜÕâ¸ö "rm -- -filename" ÕâÖÖд·¨¡£ÓÐЩ²»Óà
         getopt() µÄ rm ³ÌʽҲ»áÒÔͬÑùµÄ·½Ê½´¦Àíµ¥Ò»×ÖÔª "-"£¬Òò´ËÄúÒ²¿ÉÒÔÊÔ 
         ÊÔ "rm - -filename"¡£ 
  
  
 2.2)    ÎÒÒªÔõÑù²ÅÄܰѵµÃûµ±Öк¬ÓÐÌØÊâ×ÖÔªµÄµµ°¸¾³ý£¿ 
  
         Èç¹ûÕâ¸ö¡¸ÌØÊâ×ÖÔª¡¹ÊÇ '/'£¬ÇëÌøµ½ÕâÌâµÄ½áβ£»Èç¹ûÕâ¸öÌØÊâµÄ×ÖÔªÊÇ 
         Ò»¸ö ' »òÕß¿ØÖÆ×ÖÔª»òÕßÖÐÎÄ×Ö£¬Çë¼ÌÐøÍù϶Á¡£ 
  
         µäÐ͵ĽⷨÊÇ: 
  
                 rm -i some*pattern*that*matches*only*the*file*you*want 
  
         ÕâÑù×ӵϰ rm »áÔÚҪɾ³ý·ûºÏÄã¸øµÄÌõ¼þµÄµµ°¸Ç°£¬ÒªÄãÈ·¶¨£¬²» 
         ¹ýÈôÄãµÄ shell »á½«Ã¿¸ö×ÖÔªµÄµÚ°Ë¸ö bit ±ä³ÉÁ㣬ÄÇÒÔÖÐÎÄ×÷µµ 
         ÃûµÄµµ°¸¿ÉÄܾÍɾ³ý²»µôÁË£¡ 
  
         Óë 
  
                 rm -ri . 
  
         ÕâÑù×ӵİ rm »áɾ³ýĿǰĿ¼ÏµÄËùÓеµ°¸£¬¶øÔÚɾ³ýÒ»¸öµµ°¸Ö® 
         Ç°»áÎÊÄãÊÇ·ñҪɾ³ý´Ëµµ¡£²»¹ýºÜ²»Ðҵ쬲¢·Çÿһ¸ö°æ±¾µÄ rm ¶¼ 
         ÄÜÕâôÓá£ÔÙÕߣ¬¾ÍËãÄÜÓõϰ£¬Õâô×öµÄ»°»á°ÑĿǰËùÔÚĿ¼µÄËù 
         ÓÐ×ÓĿ¼¶¼ÕÒ½øÈ¥£¬¿ÉÄÜÒªÓà"chmod a-x" ±ÜÃâʹ×ÓĿ¼ÎÞ·¨ËÑѰ²Å 
         ÄܱÜÃâ¿Éŵĺó¹û¡£Òª×ö "rm -r" »òº¬ÓÐÍòÓÃ×ÖÔªµÄ "rm" Ç°ÇëÏÈÉî 
         ºôÎü£¬¸ãÇå³þ×Ô¼ºÊÇÔÚ×öʲô£¡ 
  
         Óë 
  
                 find . -type f ... -ok rm '{}' \; 
  
         "..." ÊÇÒ»¶ÑÓÃÒÔ±æÊ¶µµ°¸Ãû³ÆµÄÊö´Ê£¬Æ©ÈçÔÚÕÒ³öÒ»ÓÐÎʵĵµ°¸µÄ 
         inode ÎªºÎºó£¬Óà
  
                 find . -num 12345 -ok rm '{}' \; 
  
         »ò 
  
                 find . -inum 12345 -ok mv '{}' new-file-name \; 
  
         É¾³ý»ò¸ÄÃû¡£ Ñ¡Ïî "-ok" ÊǸæËß find ÒªÖ´ÐÐÖ¸ÁîǰÏÈÒªÇóÄãÈ·ÈÏ 
         ¡£ÈôÄãÄÜÈ·¶¨ËùϵÄÖ¸ÁîûÓÐÎÊÌ⣬»òÕßÅÂËùÒª´¦Àíµµ°¸ÓÐÆæ¹ÖµÄ×Ö 
         ÔªÓ¡³öÀ´»áʹөĻÂÒÆß°ËÔ㣬ÄÇÓÃÑ¡Ïî "-exec" ¾Í²»»áÏÈÒªÇóÄãµÄÈ· 
         ÈÏ¡£ 
  
         Äǵ±µµ°¸Ãû³ÆÀﺬÓР'/' Ê±ÒªÔõô°ìÄØ£¿ 
  
         ÕâÀ൵°¸ÊǺÜÌØ±ðµÄÇéÐΣ¬²¢ÇÒÖ»»áÒòΪ kernel µÄ bug ¶ø·¢Éú£¨Í¨ 
         ³£ÊÇÔÚд NFS µÄʱºò£¬Ã»ÓаѴÓÔ¶¶Ë»úÆ÷À´µÄµµ°¸Ãû³ÆÖв»ºÏ¹æ¶¨µÄ 
         ×ÖÔª¹ýÂ˵ô£©¡£ÎÒÃǵÚÒ»¼þÒª×öµÄÊÂÇé¾ÍÊÇ£¬ÊÔÖøÈ¥Á˽âΪʲôÕâ¸ö 
         ÎÊÌâ»áÈç´ËÆæ¹Ö¡£ 
 
         UNIX µÄĿ¼Æäʵ¾ÍÖ»Êǵ¥´¿µÄµµÃûºÍ inode number  µÄ³É¶Ô×éºÏ¡£ 
         ¾ÙÀýÀ´Ëµ£¬Ä¿Â¼°üº¬ÁËÈçϵÄ×ÊѶ£º 
  
                 filename  inode 
  
                 file1     12345 
                 file2.c   12349 
                 file3     12347 
  
         ÀíÂÛÉϬֻÓР'/' ºÍ '\0' Á½¸ö×ÖÔª²»ÄÜÓÃÔÚµµ°¸Ãû³ÆÖУ¬ 
         ÒòΪËüÃÇÓÐÒÔϵÄÌØÊâÓÃ;£º 
  
                 '/'     £ºÓÃÀ´·Ö¸ôĿ¼Ãû³Æ¼°µµ°¸Ãû³Æ¡£ 
                 '\0'    £ºÓÃÀ´µ±µµÃûµÄÖÕ½á×ÖÔª¡£ 
  
         ·Ç³£¡¢¼«¶Ë¡¢ºÜ²»Ðҵģ¬Ä³Ð©³§ÉÌ×ö³öÀ´µÄ NFS ÔÚ»ØÓ¦Ô¶¶Ë»úÆ÷µÄÒª 
         Çóʱ£¬»áºÜ°×³ÕµØÔì³öº¬ÓÐбÏߣ¨/£©µÄµµÃû¡£ÀýÈ磬µ±Ä³ÈËÔÚ Mac 
         »òÆäËû·Ç Unix »úÆ÷͸¹ý NFS ÔìÒ»¸öÒÔÈÕÆÚΪÃû³ÆµÄµµ°¸µ½ÄãµÄ 
         Unix ÖС£ÄÇô£¬ÄãµÄ Unix Ä¿Â¼¿´ÆðÀ´¿ÉÄܾͻáÏñÕâ¸öÑù×Ó£º 
  
                 filename  inode 
  
                 91/02/07  12357 
  
         ÎÒÃÇÇ°ÃæËùÌá¹ýµÄ 'find' »ò 'rm' ¶¼ÎÞ·¨É¾³ýÕâ¸öµµ°¸£¬ÒòΪÕâЩ»ò 
         ÆäËûµÄ Unix ³Ìʽ¶¼»áÇ¿ÖÆ°Ñ '/' µ±×÷ǰÊöµÄ·Ö¸ô×ÖÔª½âÊÍ¡£ 
  
         Æäʵ£¬ÈκÎÒ»°ãµÄ³Ìʽ¶¼»áÊÔÖø×ö unlink("91/02/07")£¬¶øÕâ¶Ô 
         kernel À´Ëµ£¬ËüµÄÒâÒåÊÇ "unlink Ä¿Â¼ 91 ÏµÄ×ÓĿ¼ 02 Öеĵµ 
         °¸ 07"£¬µ«ÊÇ£¬ÎÒÃDz¢Ã»ÓÐÕâÑùµÄµµ°¸£¬ÎÒÃÇÓеÄÊÇÒ»¸öÃû½Ð 
         "91/02/07" µÄµµ°¸ÔÚĿǰµÄĿ¼ÖС£ÕâÊǸö¼«Ï¸Î¢µ«¼«ÖØÒªµÄÇø±ð¡£ 
  
         Õâʱ¸ÃÔõô°ìÄØ£¿Ê×ÏȻص½²úÉúÕâÖÖÂÒÆß°ËÔãµµÃûµÄ Mac£¬ÊÔÊÔ 
         ¿´ NFS daemon Òª²»ÒªÈÃÄã¸Ä³É²»º¬ '/' µÄµµÃû¡£Èç¹û²»ÐУ¬ÄǾ͵à
         ÕÒÄãµÄϵͳ¹ÜÀíÕß°ïæÁË¡£ÇëËûÊÔÊÔÒÔϼ¸ÖÖ·½·¨Ö®Ò»: 
  
         1. Óà"ls -i" ÕÒ³öµµ°¸µÄ inode number£¬umount µôÕâ¸ö 
            file system È»ºóÒÔ "clri" ½«Õâ¸ö inode Çå³ý£¬È»ºó 
            ÆíÇó¡°fsck" µÄ³É¹¦¡£Õâ¸ö×÷·¨»áɾ³ýÕâÂÒÆß°ËÔãµµÃûµÄ 
            µµ°¸¡£ 
  
         2. Èô»¹Ïë±£´æÕâ¸öµµ°¸µÄ×ÊÁÏ£¬ÊÔÊÔÒÔϵÄ×ö·¨£º 
  
            -ÔÚÄÇÂÒÆß°ËÔãµµÃûµÄµµ°¸ËùÔÚ֮Ŀ¼µÄÇ×Ŀ¼µ×Ͻ¨Ò» 
             ¸ö×ÓĿ¼£¬½«¾ÉµÄĿ¼ÏÂÄܰᶯµÄµµ°¸¶¼°áµ½ÐµÄĿ¼ 
             Àï¡£ 
            -ÒÔ "ls -id" È¡µÃ¾ÉĿ¼µÄ inode number 
            -unmount µôÕâ¸ö file system£¬ Óà"clri" ÇåµôÄǸö 
             Ä¿Â¼µÄ inode 
            -"fsck" ÄǸö file system 
            -´ÓРmount ÉÏÄǸö file system 
            -½«ÐµÄĿ¼¸ÄÃûΪ¾ÉµÄĿ¼Ãû 
            -´Ó lost+found ÏÂÕÒ»ØÄǸöµµ°¸£¬¸Ä¸öºÃÃû×Ö£¬·Å»ØÔ­ 
             À´µÄĿ¼¡£ 
  
         3.ÈôÄãÓÐÒ»¸ö½Ð×ö "fsdb" µÄ³Ìʽ£¬ÄÇÄã¿ÉÒÔÊÔÊÔ¿´à¶£¡ 
  
  
 2.3)  ÎÒÒªÈçºÎÁгöÕû¸öĿ¼Ê÷ÄØ? 
  
         µ×ÏÂÓм¸ÖÖ×ö·¨×Ô¼ºÌôÒ»¸ö°É£º 
  
                 ls -R             (not all versions of "ls" have -R) 
                 find . -print     (should work everywhere) 
                 du -a .           (shows you both the name and size) 
  
         ÈôÄãÒªÕÒµÄÊÇÌØ¶¨µÄµµ°¸£¬ÀýÈç˵ÊǵµÃû½áβΪ ".c" Õߣ¬¿ÉÓà
  
                 find . -name '*.c' -print 
  
         "find" ÊÇÒ»¸öºÜÇ¿ºÜºÃÓõijÌʽ¡£ÖµµÃһѧ¡£ 
  
  
 2.4)  ÒªÔõôÉ趨 prompt ²Å»áÏÔʾ³öĿǰËùÔÚµÄĿ¼£¿ 
  
         ÕâµÃÊÓÄãµÄ shell ¶ø¶¨¡£ÓÐЩ shell ºÜÈÝÒ×£¬ÓÐЩ shell ºÜÄÑ£¬ÓÐЩ¸ù 
         ±¾°ì²»µ½¡£ 
  
         C Shell (csh): 
  
           ½«ÒÔÏµĶ«Î÷¼ÓÈëÄãµÄ .cshrc Àï¡£ 
  
                 alias setprompt 'set prompt="${cwd}% "' 
                 setprompt           # to set the initial prompt 
                 alias cd 'chdir \!* && setprompt' 
  
           ¼ÙÈçÄãÓÐÓàpushd Óë popd, °Ñµ×ÏµĶ«Î÷Ò²¼Ó½øÈ¥¡£ 
  
                 alias pushd 'pushd \!* && setprompt' 
                 alias popd  'popd  \!* && setprompt' 
  
           ÈôÄãµÄ C shell Ã»ÓР$cwd Õâ¸ö±äÊý£¬ÄǾ͵ÃÓà`pwd` ´úÌæÖ®¡£ 
  
           ÈôÄãÏëÒªµÄÖ»ÊÇ prompt ÀïÓÐĿǰËùÔÚĿ¼µÄ×îºóÒ»¸ö³É·Ö 
           ("mail%" ¶øÇ "/usr/spool/mail%") ÔòÓà
  
                 alias setprompt 'set prompt="$cwd:t% "' 
  
           ÓÐЩ¾É°æµÄ csh ½« && ºÍ || µÄÒâÒåŪ·´ÁË¡£Äã¿ÉÒÔÊÔÊÔ¿´£º 
  
                 false && echo bug 
  
           Èô½á¹ûÊÇÓ¡³ö "bug"£¬ÄǾͰѠ&& ºÍ || ¶Ôµ÷£¬»òÕÒÒ»¸öûÓÐÕâÖÖ 
           bug µÄ csh À´Óᣠ
  
         Bourn Shell (sh): 
  
           Èç¹ûÄãÓнÏаæµÄ Bourn Shell£¨SVR2 »ò¸üеİ汾£©£¬ÄÇôÄã¾Í¿É 
           ÒÔÓÃÒ»¸ö shell function À´ÔìÄã×Ô¼ºµÄÃüÁƩÈç "xcd"£º 
  
                 xcd() { cd $* ; PS1="`pwd` $ ";} 
  
           Èç¹ûÄãµÄ Bourn Shell ÊDZȽϾɵİ汾£¬Ò²ÊÇ¿ÉÒÔ×öµ½£¬µ«ÊÇ·½·¨±È 
           ½Ï¸´ÔÓ¡£ÕâÀïÌṩһ¸ö·½·¨¡£°ÑÒÔϵÄÄÚÈݼÓÈëÄãµÄ .profile£º 
  
                 LOGIN_SHELL=$$ export LOGIN_SHELL 
                 CMDFILE=/tmp/cd.$$ export CMDFILE 
                 # 16 is SIGURG, pick a signal that's not likely to be 
                 used 
                 PROMPTSIG=16 export PROMPTSIG 
                 trap '. $CMDFILE' $PROMPTSIG 
  
           È»ºó°ÑÒÔϵIJ¿·Ýд³ÉÒ»¸ö¿ÉÖ´ÐеĠscript£¨²»ÐèÒªËõÅÅ£©£¬Ãû×־͠
           ½Ð×ö "xcd"£¬·ÅÔÚÄãµÄ PATH ÖР
  
                 : xcd directory - change directory and set prompt 
                 : by signalling the login shell to read a command file 
  
                 cat >${CMDFILE?"not set"} <<EOF 
                 cd $1 
                 PS1="\`pwd\`$" 
                 EOF 
                 kill -${PROMPTSIG?"not set"} ${LOGIN_SHELL?"not set"} 
  
           ÄÇô£¬ÏÖÔھͿÉÒÑÓà"xcd /some/dir" À´¸Ä±ä¹¤×÷Ŀ¼ÁË¡£ 
  
         Korn Shell (ksh): 
  
           °ÑÏÂÃæÕâÐмÓÈëÄãµÄ .profile ÖУº 
  
                 PS1='$PWD $ ' 
  
           Èç¹ûÄãÖ»ÏëÏÔʾ×îºóÒ»¸ö²¿·Ö£¬ÄÇô¾ÍÓà
  
                 PS1='${PWD##*/} $ ' 
  
         T C shell (tcsh) 
  
           Tcsh Êdz£ÓõĠcsh ¼ÓÇ¿°æ£¬Ôö¼ÓÁËһЩÄÚ½¨±äÊý£¨¼°Ðí¶àÆäËûµÄ¹¦ 
           ÄÜ£©£º 
  
                 %~          the current directory, using ~ for $HOME 
                 %/          the full pathname of the current directory 
                 %c or %.    the trailing component of the current directory 
  
           ËùÒÔÄã¿ÉÒÔÖ±½ÓÓà
  
                 set prompt='%~' 
  
         BASH (FSF's "Bourne Again Shell") 
  
           $PS1 ÖеĠ\w ±íʾ¹¤×÷Ŀ¼µÄÍêÕû·¾¶£¨ÒÔ ~ ±íʾ $HOME£©£»\W Ôò 
           ÊDZíʾ¹¤×÷Ŀ¼µÄ×îºóÒ»¸ö²¿·Ý¡£ËùÒÔ£¬Ö»Òª°ÑÇ°ÃæËùÌáÓйؠsh ºÍ 
           ksh µÄ·½·¨×öÒÔϵÄÐ޸Ġ
  
                 PS1='\w $ ' 
           »ò 
                 PS1='\W $ ' 
  
 
 2.5) µ±ÎÒÔÚд shell script Ê±£¬ÒªÈçºÎ´Ó terminal ¶ÁÈë×ÖÔª£¿ 
  
         ÔÚ sh ÖУ¬Äã¿ÉÒÔÓàread¡£Í¨³£ÊÇʹÓÃÔÚ»ØÈ¦£¬ÈçÏÂÀý£º 
  
                 while read line 
                 do 
                     ... 
                 done 
  
         ÔÚ csh ÖУ¬ÔòÓà$<£º 
  
                 while ( 1 ) 
                     set line = "$<" 
                     if ( "$line" == "" ) break 
                         ... 
                 end 
  
         ºÜ¿ÉϧµÄ£¬csh ²¢Ã»Óз½·¨ÅжϿհ×Ðк͵µ°¸½á⣨end-of-file£©µÄ²»Í¬¡£ 
  
         Èç¹ûÄãÒªÓàsh ´Ó terminal ¶ÁÒ»¸ö×ÖÔª£¬ÄÇôÄã¿ÉÒÔÊÔÊÔ 
  
                 echo -n "Enter a character: " 
                 stty cbreak         # or  stty raw 
                 readchar=`dd if=/dev/tty bs=1 count=1 2>/dev/null` 
                 stty -cbreak 
                 echo "Thank you for typing a $readchar ." 
  
 
 2.6) ÔõôÑù°Ñ "*.foo" ¸ÄÃûΪ "*.bar" ÄØ£¿ÔõÑù°Ñµµ°¸Ãû³Æ¸Ä³ÉÐ¡Ð´ÄØ£¿ 
  
         ÎªÊ²Ã´ "mv *.foo *.bar" ²»¶ÔÄØ? ÏëÏë shell ÊÇÔõÑù°ÑÍòÓÃ×ÖÔªÕ¹¿ªµÄ 
         °É¡£ ÔÚ mv ¶ÁÈ¡²ÎÊýǰ "*.foo" Óë "*.bar" ¾ÍÒѾ­Õ¹¿ªÁË¡£"mv *.foo 
         *.bar" ÔÚ¸÷ÖÖ²»Í¬µÄ shell »áÓв»Í¬µÄ½á¹û¡£ Csh µÄ»°»áÓ¡³ö "No 
         match"£¬ÒòΪÕÒ²»µ½ "*.bar"¡£ Sh ÔòÊÇ»áÖ´ÐР"mv a.foo b.foo c.foo 
         *.bar"£¬Ò²¾ÍÊÇ˵Èç¹ûÖ»ÓÐÔÚÓÐÒ»ÃûΪ "*.bar" µÄ×ÓĿ¼´æÔÚʱ mv ²Å»á 
         ÈÏΪִÐгɹ¦£¬²»¹ý¾ÍËã³É¹¦Ò²²»ÊÇÄãËùÔ¤ÆÚµÄ½á¹û¡£ 
  
         ÕýÈ·µÄ×ö·¨ÊÇÓÃÄãËùÓõĠshell ÌṩµÄ»ØÈ¦À´×ö¡£ÈôÄãµÄϵͳÖÐÓР
         "basename" Õâ¸öÖ¸Á 
  
         C Shell: 
                 foreach f ( *.foo ) 
                     set base=`basename $f .foo` 
                     mv $f $base.bar 
                 end 
  
         Bourne Shell: 
                 for f in *.foo; do 
                     base=`basename $f .foo` 
                     mv $f $base.bar 
                 done 
  
         ÓÐЩ shell »áÌṩ¾Í×Ô¼ºµÄ±äÊýÌæ´ú¹¦ÄÜ£¬ÄǾͿÉÒÔ²»Óà"basename"£¬ 
         ¶øÓøü¼òµ¥µÄ»ØÈ¦ÁË£º 
  
         C Shell: 
  
                 foreach f ( *.foo ) 
                     mv $f $f:r.bar 
                 end 
  
         Korn Shell: 
  
                 for f in *.foo; do 
                     mv $f ${f%foo}bar 
                 done 
  
         Èç¹ûûÓР"basename" ¿ÉÓûòÊÇëÒª×öÏñ°Ñ foo.* ¸ÄÃûΪ bar.* Ö®ÀàµÄ 
         Ê£¬ÄÇô¿ÉÒÔÓÃÆäËûµÄ·½·¨Èç "sed" °ÑÔ­À´µÄµµ°¸Ãû³Æ×ö·Ö¸ôµÄ¶¯×÷£¬µ« 
         ÊÇ»ØÈ¦µÄÏë·¨ÊÇÒ»ÑùµÄ¡£ÄãÒ²¿ÉÒÔÀûÓà"sed" °ÑµµÃûת»»³É "mv" µÄÃüÁî 
         £¬È»ºóÔÙ°ÑÕâЩÃüÁîת¸ø "sh" Ö´ÐС£ÈçÏ£º 
  
                 ls -d *.foo | sed -e 's/.*/mv & &/' -e 's/foo$/bar/' | sh 
  
         ÔÚ 1990 Äê 4 ÔÂʱ£¬Vladimir Lanin °ÑËû×Ô¼ºÐ´µÄÒ»¸ö½Ð "mmv" µÄ³Ìʽ 
         post µ½ comp.sources.unix (Volumn 21, issues 87 and 88)£¬Õâ¸ö³Ìʽ 
         ¾ÍÄܹ»°ÑÕâ¼þÊ´¦ÀíµÃºÜºÃ¡£ Äã¿ÉÒÔÕâÑùʹÓ㺠
  
                 mmv '*.foo' '=1.bar' 
  
         ÒÔÉÏËùÌáµÄ shell ÖеĻØÈ¦Ò²¿ÉÒÔÓÃÀ´×öµµ°¸Ãû³ÆµÄ´ó¡¢Ð¡Ð´×ª»»¡£Äã¿É 
         ÒÔÓøĵµÃûµÄ·½Ê½°Ñ´óдµµÃû¸ÄΪСд£º 
  
         C Shell: 
             foreach f ( * ) 
                 mv $f `echo $f | tr '[A-Z]' '[a-z]'` 
             end 
  
         Bourne Shell: 
             for f in *; do 
                 mv $f `echo $f | tr '[A-Z]' '[a-z]'` 
             done 
  
         Korn Shell: 
             typeset -l l 
             for f in *; do 
                 l="$f" 
                 mv $f $l 
             done 
  
         Èç¹ûÄ㻹ϣÍûÄÜ´¦Àíº¬ÓÐÌØÊâ×ÖÔª£¨¿Õ°×»òÆäËûµÄÆæ¹Ö×ÖÔª£©µÄµµÃû£¬ÄÇ 
         Ã´Äã×îºÃÓ㺠
  
         Bourne Shell: 
  
             for f in *; do 
               g=`expr "xxx$f" : 'xxx\(.*\)' | tr '[A-Z]' '[a-z]'` 
               mv "$f" "$g" 
             done 
  
         'expr' ²»¹ÜµµÃûÀïÓÐûÓÐÌØÊâ×ÖÔª¶¼»áÓ¡³öµµÃû¡£ 
  
         ÓÐЩ°æ±¾µÄ "tr" ÐèÒªÓà'[' ºÍ ']'£¬ÓÐЩÔò²»±Ø¡£²»¹ý£¬²»¹ÜÊDz»ÊÇÒ» 
         ¶¨ÒªÓà'['  Óë ']' µÄ "tr"£¬¼ÓÁË×ÜÊÇûÓк¦´¦¡£ 
  
         ÈôÄãµÄϵͳÀïÓÐ×° "perl"£¬ÄÇÄã¿ÉÒÔÓàLarry Wall Ð´µÄÕâ¸ö¶àÓÃ;¸Äµµ 
         ÃûµÄ³Ìʽ¡£ 
  
         #!/usr/bin/perl 
         # 
         # rename script examples from lwall: 
         #       rename 's/\.orig$//' *.orig 
         #       rename 'y/A-Z/a-z/ unless /^Make/' * 
         #       rename '$_ .= ".bad"' *.f 
         #       rename 'print "$_: "; s/foo/bar/ if <stdin> =~ /^y/I' * 
  
         $op = shift; 
         for (@ARGV) { 
              $was = $_; 
              eval $op; 
              die $@ if $@; 
              rename($was,$_) unless $was eq $_; 
         } 
  
  
 2.7)  ÎªÊ²Ã´ÎÒÓà"rsh host command" »áÓÐÒ»Ð©Ææ¹ÖµÄѶϢ³öÏÖ£¿ 
  
         (ÕâÀïËùÖ¸µÄ "rsh"[Ò²¿ÉÄÜÊÇ "remsh" »ò "remote"] ÊÇ remote shell£¬ 
         ¶ø²»ÊÇÔÚÓÐЩϵͳÖÐÃûΪ "rsh" µÄ restricted shell£¬ÕâÁ½ÕßÌì²îµØÔ¶ 
         ÁË£¡) 
  
         ÈôÄãÔÚÔ¶¶ËµÄÕʺÅÓõÄÊÇ C shell£¬ÄÇÔ¶¶ËµÄÖ÷»ú»á°ïÄãÆô¶¯Ò»¸ö C 
         shell À´Íê³ÉÄãËùϵÄÄǸö 'command'£¬Õâ¸ö shell »á¶ÁÈ¡ÄãÔÚÔ¶¶ËµÄ 
         .cshrc µµ¡£ÈôÄãµÄ .cshrc ÖÐÓР"stty" »ò "biff" ÕâÀ಻ÊʺϠnon- 
         interactive shell µÄÖ¸Áî¡£ÄǾͿÉÄÜ»áÓÐÄãËùÒâÏë²»µ½µÄ½á¹û£¬¾ÙÀýÀ´ 
  
         Ëµ£¬ÈôÄã°Ñ 
  
                 stty erase ^H 
                 biff y 
  
         ·ÅÔÚÄãµÄ .cshrc µµÀïÃæÄã¿ÉÄÜ»áµÃµ½ÀàËÆÒÔÏÂµÄÆæ¹ÖѶϢ 
  
                 % rsh some-machine date 
                 stty: : Can't assign requested address 
                 Where are you? 
                 Tue Oct  1 09:24:45 EST 1991 
  
         ÈôÄãʹÓà"at" »ò "cron"£¬ÄÇ¿ÉÄÜÒ²»áµÃµ½ÀàËÆµÄ´íÎóѶϢ¡£ 
  
         ²»¹ýû¹ØÏµ£¬½â¾öµÄ·½·¨·Ç³£¼òµ¥¡£ÈôÄãµÄ ".cshrc" ÀïÃæÓÐÒ»¶ÑÖ»ÓÐÔÚ 
         interactive shell ÖвÅÓÐÓõĠoperation£¬ÄǾͽ«ÄÇЩ operation ¶¼Óà
         ÒÔϵÄ×ö·¨°üÆðÀ´£º 
  
             if ( $?prompt ) then 
                     operations.... 
             endif 
  
         ÒòΪÔÚÒ»¸ö non-interactive Öв»Ó¦¸ÃҲûÓбØÒªÈ¥É趨 "prompt"¡£ 
  
         »¹ÓÐһЩֻÓÐÔÚ¿ªÆôÒ»¸ö login sessionʱ²ÅÓÐÓõĶ«Î÷£¬×îºÃ°áµ½ 
         ".login" ÖÐÈ¥¡£ 
  
  
 2.8)  ÎÒÒªÔõÒªÓóÌʽ»òÕßÊÇ shell script ÖÐÉ趨ĿǰËùÓõĠshell µÄ»·¾³ 
       ±äÊý»ò¸Ä±äËùÔÚµÄĿ¼? 
  
         ÈôûÓÐ×öÒ»Ð©ÌØÊâ°²ÅÅÊÇ×ö²»µ½µÄ¡£ÒòΪ£¬µ±ÎÒÃÇÔì³öÒ» child process 
         Ê±£¬´Ë process »á¼Ì³ÐÆä parent µÄ±äÊýÓëËùÔÚµÄĿ¼¡£ÔÚÕâ¸ö child 
         process Ö»Äܸĵ½×Ô¼ºµÄ±äÊýÓëËùÔÚĿ¼¶øÎÞ·¨Ó°Ïìµ½Æä parent¡£ 
  
         Òª´ïµ½´ËÄ¿µÄ£¬parent process ÒªÓë child process ÓÐËù¹µÍ¨¡£µ± 
         child process Òª¸Ä±ä±äÊýֵʱµÃ°ÑÒª¸Ä±äµÄ±äÊý¼°ÆäÄÚÈÝдµ½Ò»¸ö½²ºÃ 
         µÄµØ·½£¬Èàparent process È¥¶ÁÈ¡£¬ ²¢¸Ä±ä parent process µÄ±äÊý¡£ 
  
  
         ÁíÒ»¸ö×ö·¨ÔòÊÇдһ¸ö shell script£¬È»ºóÔÚ Bourne shell »ò Korn 
         shell ÖÐÓà"."£¬ÔÚ C shell ÖÐÓàsource È¥Ö´ÐÐÄǸö shell script¡£ 
         Èô´Ë sript ÃûΪ "myscript" : 
  
  
         ÔÚ Bourne shell »ò Korn shell ÖоÍÓà
  
                 . myscript 
  
         ÔÚ C shell ÖÐÔòÓà
  
                 source myscript 
  
         ÈôÄãÏë×öµÄÖ»ÊÇÒª¸Ä±äËùÔÚĿ¼»òÊÇÉ趨һ¸ö»·¾³±äÊý£¬ÄÇʹÓàC shell 
         ÖеĠalias »òÊÇ Bourne/Korn shell Öеĺ¯Êý¾Í¿É´ï³ÉÄãµÄÄ¿µÄ¡£¿É²Î 
         ¿¼"ÒªÔõôÉ趨 prompt ²Å»áÏÔʾ³öĿǰËùÔÚµÄĿ¼"Ò»½ÚÖеÄ×ö·¨¡£ 
  
         Thomas Michanek (xtm@telelogic.se) Ìṩһ¸ö¸üÏêϸµÄ½â´ð( 
         ftp://ftp.wg.omron.co.jp/pub/unix-faq/docs/script-vs-env)¡£ 
  
  
 2.9)  ÎÒÒªÈçºÎ½« csh µÄ stdout Óë stderr µ¼Ïòµ½²»Í¬µÄµØ·½ÄØ£¿ 
  
         ÔÚ csh ÖУ¬Óà">" ½« stdout µ¼Ïò£¬Óà">&" ÔòÄܽ« stdout Óë stderr 
         Ò»Æðµ¼Ïò¡£¿ÉÊDz»ÄÜÖ»µ¥¶À°Ñ stderr ×ªÏò¡£×îºÃµÄ·½·¨ÊÇ 
  
                 ( command >stdout_file ) >&stderr_file 
  
         ÒÔÉϵÄÃüÁî»á¿ªÒ»¸ö subshell Ö´ÐР"command"£»¶øÕâ¸ö subshell µÄ 
         stdout Ôò±»×ªÏòµ½ stdout_file£¬Í¬Ê±Õâ¸ö subshell µÄ stdout ºÍ 
         stderr Ôò¶¼±»×ªÏòµ½ stderr_file£¬µ«ÊÇÒòΪ stdour ÒѾ­Ïȱ»×ªÏòÁË£¬ 
         ËùÒÔ stderr ¾Í»á±»×ªµ½ stderr_file ÁË¡£ 
  
         Èç¹ûÄãÖ»Êǵ¥´¿µÄ²»Ïë°Ñ stdout ×öתÏò£¬ÄÇô¾ÍÓàsh À´°ïÄã°É¡£ 
  
                 sh -c 'command 2>stderr_file' 
  
 
 2.10) ÎÒÈçºÎÔÚ .cshrc ÖÐÅжÏÊÇ·ñÔÚ login shell ÖУ¿ 
  
         µ±ÓÐÈËÕâôÎʵÄʱºò£¬Í¨³£ÒªÎʵÄÊÇ 
  
         ÒªÈçºÎÅжÏÊÇ·ñÊÇÒ»¸ö interactive shell? »òÊÇÎÊÒªÈçºÎÅжÏÊÇ·ñÊÇ 
         ×îÉϲãµÄ shell ? 
  
         ÈôÄãÊÇÒªÎÊ "ÊÇ·ñÔÚ login shell ÖÐ"£¨×¢£º¾ÍÊÇÔÚ×öÍê .cshrc ºó£¬»á 
         ÔÙÈ¥×ö .login£©£¬ÄÇôÄãÒ²ÐíÓà"ps" ºÍ "$$" Ëæ±ãŪһŪ£¬¾ÍÄÜÖªµÀÁË 
         ¡£ÒòΪͨ³£ login shells µÄÃû×ÖÔÚ "ps" ¿´ÆðÀ´¶¼ÊÇÓÉ '-' ×ö¿ªÍ·µÄ¡£ 
         Èç¹ûÄãÊÇÕæµÄ¶ÔÁíÍâÁ½¸öÎÊÌâ¸ÐÐËȤ£¬ÄÇôÕâÀïÓиö·½·¨¿ÉÒÔÈÃÄãÔÚ 
         .cshrc ÖÐÅжϡ£ 
  
                 if (! $?CSHLEVEL) then 
                 # 
                 # This is a "top-level" shell, 
                 # perhaps a login shell, perhaps a shell started up by 
                 # 'rsh machine some-command' 
                 # This is where we should set PATH and anything else we 
                 # want to apply to every one of our shells. 
                 # 
                     setenv CSHLEVEL 0 
                     set home = ~username   # just to be sure 
                     source ~/.env          # environment stuff we always want 
                 else 
                 # 
                 # This shell is a child of one of our other shells so 
                 # we don't need to set all the environment variables again. 
                 # 
                     set tmp = $CSHLEVEL 
                     @ tmp++ 
                     setenv      CSHLEVEL        $tmp 
                 endif 
  
                 # Exit from .cshrc if not interactive, e.g. under rsh 
                 if (! $?prompt) exit 
  
                 # Here we could set the prompt or aliases that would be useful 
                 # for interactive shells only. 
  
                 source ~/.aliases 
  
  
 2.11) ÔÚ shell ÖÐÒªÓÃÔõÑùµÄ pattern À´±íʾ³ýÁË "." Óë ".." ÍâµÄËùÓеµ°¸£¿ 
  
         Õâ¸öÎÊÌâ¿´À´ÈÝÒס£ÒòΪÄã¿ÉÒÔÓà
  
         *       ±íʾËùÓв»ÊÇÒÔ "." Îª¿ª¶ËµÄµµ°¸ 
  
         .*      ±íʾËùÓÐÒÔ "." Îª¿ª¶ËµÄµµ°¸£¬µ«ÊÇÕâÑù»á°Ñ "." ºÍ ".." Ò²°ü 
                 º¬½øÀ´£¬µ«ÊÇͨ³£Äã²¢²»»áÏë°ÑÕâÁ½¸öÒ²º¬½øÀ´¡£ 
  
         .[!.]*  ÕâÖ»ÓбȽÏеĠshells ²ÅÄÜÓã»Ä³Ð© shells Óà"^" ´úÌæ "!"£» 
                 ¶ø·ûºÏ POSIX ±ê×¼µÄ shells Ò»¶¨ÜÓà"!"£¬µ«ÊǴ󲿷ÝÒ²¶¼ÄܽӠ
                 ÊÜ "^"£»ËùÓо߿ÉÒÆÖ²ÐÔµÄÓ¦ÓóÌʽ¶¼²»Ó¦¸ÃÔÚ "[" Ö®ºó½ô½ÓÖøÃ»±» 
                 quota ÆðÀ´µÄ "^")±íʾËùÓÐÒÔ "." Îª¿ªÍ·²¢ÇÒµÚ¶þ¸ö×ÖÔª²»ÊÇ "." 
                 µÄµµ°¸£»µ«ÊÇÕâÑùÈ´»á©µô "..foo" ÕâÀàµÄµµ°¸¡£ 
  
         .??*    ±íʾËùÓÐÒÔ "." Îª¿ªÍ·ÇÒµµÃû³¤¶ÈÖÁÉÙΪ 3 µÄµµ°¸£¬ÕâÑù´ó¸Å 
                 ¾ÍÄܱܿª "." ºÍ ".." ÁË£¬µ«ÊÇÈ´»¹Êǻ᩵ô ".a" ÕâÀàµÄµµ¡£ 
  
         ËùÒÔÏëÒªÕýÈ·µØ±íʾ³ýÁË "." Óë ".." Ö®ÍâËùÓеĵµ°¸£¬Äã±ØÐëÒªÓõ½ 3 
         ¸ö patterns£¨Èç¹ûÄãûÓÐÏñ ".a" ÕâÑùµÄµµ°¸£¬ÄÇÄã¿ÉÒÔÈ¥µôµÚÒ»¸ö 
         pattern£©£º 
  
                 .[!.]* .??* * 
  
         »òÕßÄãÒ²¿ÉÒÔÓÃÒ»Á½¸öÍⲿ³ÌʽºÍ backquote substitution¡£ÕâÑù¾ÍºÜÍê 
         ÃÀÁË£º 
  
  
               `ls -a | sed -e '/^\.$/d' -e '/^\.\.$/d'` 
  
                 (or `ls -A` in some Unix versions) 
  
         ²»¹ý¼´Ê¹ÊÇÕâÑù×ö£¬ÅöÉϵµÃûÀïÃæº¬Óл»ÐÐ×ÖÔª£¬ IFS ×ÖÔª£¬»òÊÇÍòÓÃ×Ö 
         ÔªÈÔÈ»ÊÇûéü¡£ 
  
  
 2.12) ÔÚ Bourne shell script ÀïÒªÔõôÕÒ³ö×îºóÒ»¸ö²ÎÊý£¿ 
  
         ÓÉ 
                 Martin Weitzel <@mikros.systemware.de:martin@mwtech.uucp> 
                 Maarten Litmaath <maart@nat.vu.nl> 
         ÌṩµÄ´ð°¸£º 
  
         ÈôÄãÄÜÈ·¶¨²ÎÊý²»»á³¬¹ý¾Å¸öµÄ»°£¬¿ÉÓ㺠
  
                 eval last=\${$#} 
  
         ÔÚ·ûºÏ POSIX ±ê×¼µÄ shell À²»¹ÜÓжàÉÙ¸ö²ÎÊý¶¼¿ÉÓÃÉÏÊöµÄ·½·¨¡£ 
  
         µ×Ï·½·¨ÊÇÒ»¶¨ÓÐÓõģº 
  
                 for last 
                 do 
                         : 
                 done 
  
         ¸üÒ»°ãÐÔµÄ×ö·¨ÊÇ: 
  
                 for i 
                 do 
                         third_last=$second_last 
                         second_last=$last 
                         last=$i 
                 done 
  
         ÈôÄãÏë×öµÄÊǽ«×îºóÒ»¸ö²ÎÊýÈ¥³ý»òÊǽ«Ò»¶Ñ²ÎÊýµÄ˳Ðò·´¹ýÀ´»òÊÇÈ¡Óà
         µÚ N ¸ö²ÎÊý¡£µ×ÏÂÊÇÒ»¸ö²»ÓÃÔì³ö subprocess Ö»Óàshell ×齨¹¦ÄܵĠ
         ×ö·¨£º 
  
                 t0= u0= rest='1 2 3 4 5 6 7 8 9' argv= 
  
                 for h in '' $rest 
                 do 
                         for t in "$t0" $rest 
                         do 
                                 for u in $u0 $rest 
                                 do 
                                         case $# in 
                                         0) 
                                                 break 3 
                                         esac 
                                         eval argv$h$t$u=\$1 
                                         argv="$argv \"\$argv$h$t$u\""   # (1) 
                                         shift 
                                 done 
                                 u0=0 
                         done 
                         t0=0 
                 done 
  
                 # now restore the arguments 
                 eval set x "$argv"                                      # (2) 
                 shift 
  
         Õâ¸öÀý×Ó¿ÉÒÔÓõ½ 999 ¸ö²ÎÊý£¬Ó¦¸Ã¹»ÓÃÁ˰ɣ¿×Ðϸ¿´¿´(1)Óë(2)±êʾµÄ 
         µØ·½£¬Ïë°ì·¨Ëµ·þÄã×Ô¼º²»¹Ü²ÎÊýÀïÃæÓÐÊ²Ã´Ææ¹ÖµÄ×ÖÔªÕâÁ½Ðж¼²»»á³ö 
         ²î´í¡£ 
  
         ÒªÕÒµÚ N ¸ö²ÎÊý£¬Ó㺠
  
                 eval argN=\$argv$N 
  
         Òª½«²ÎÊýµÄ˳Ðò·´¹ýÀ´£¬±êʾΪ(1)µÄÄÇÒ»ÐбØÐë¸Ä³É 
  
                 argv="\"\$argv$h$t$u\" $argv" 
  
         ×Ô¼ºÁ·Ï°×îºóÒ»¸ö²ÎÊýÈ¥³ýµÄ·½·¨¡£ 
  
         ÈôÔÊÐíºô½ÐÍⲿָÁîÕâÀàÔì³ö subprocess µÄ×ö·¨£¬´úÖ¾¾Í¸üºÃ°ìÁË¡£ 
         µ×ÏÂÊÇÕÒ³ö argvN£º 
  
                 N=1 
  
                 for i 
                 do 
                         eval argv$N=\$i 
                         N=`expr $N + 1` 
                 done 
  
         Òª½«²ÎÊýµÄ˳Ðò·´¹ýÀ´»¹ÓÐÒ»¸ö²»ÓÃÔì³ö subprocess£¬Óиü¼òµ¥µÄ·½·¨¡£ 
         Õâ¸ö·½·¨Ò²¿ÉÒÔÓÃÀ´È¥³ý×îºóÒ»¸ö²ÎÊý£¬ ²»¹ýҪעÒâµÄÊÇ argvN ²»ÔÚÊÇ 
         Ô­À´µÄµÚ N ¸ö²ÎÊý£º 
  
                 argv= 
  
                 for i 
                 do 
                         eval argv$#=\$i 
                         argv="\"\$argv$#\" $argv" 
                         shift 
                 done 
  
                 eval set x "$argv" 
                 shift 
  
  
 2.13) ÎªÊ²Ã´ÓÐÈË˵ $PATH Àï²»¿ÉÒÔ·Å '.' ÄØ£¿ 
  
         ±³¾°ÖªÊ¶£º »·¾³±äÊý PATH ÊÇÒ»´®ÓÃðºÅ¸ô¿ªµÄĿ¼¡£µ±ÄãÏÂÒ»¸öÖ¸Áî¶ø 
         Ã»ÓÐÖ¸¶¨ËùÔÚµÄĿ¼£¬ÀýÈç "ls" ¶ø·Ç "/bin/ls"£¬ÔòÄãµÄ shell ¾Í»áÔÚ 
         PATH ËùÖ¸¶¨µÄĿ¼ÖÐÈ¥ÕÒѰָÁî¡£ 
  
  
         Äã¿ÉÒÔÔÚ PATH ÀïÃæ·ÅÈëĿǰËùÔÚµÄĿ¼ "." ¡£»òÕߣ¬ÔÚ PATH ÖмÓÈëÒ» 
         ¸ö¿ÕµÄĿ¼£¬ÕâÁ½ÕßÊǵÈЧµÄ 
  
               for csh users: 
  
                 setenv PATH :/usr/ucb:/bin:/usr/bin 
                 setenv PATH .:/usr/ucb:/bin:/usr/bin 
  
               for sh or ksh users 
  
                PATH=:/usr/ucb:/bin:/usr/bin export PATH 
                PATH=.:/usr/ucb:/bin:/usr/bin export PATH 
  
         °Ñ "." ·ÅÔÚ PATH ÖÐÊǺܷ½±ãµÄ£¬ÈôÒªÖ´ÐР"./a.out" Ö»Òª´ò "a.out" 
         ¼´¿É£¬µ«ÊÇÕâô×ö»áÓдóÂé·³¡£ 
  
         µ±°Ñ "." ·ÅÔÚ PATH µÄ×îÇ°ÃæÇé¿öÏ¡£ÈôÄãĿǰËùÔÚĿ¼ÊÇÈç "/tmp" Õâ 
         Ñù´ó¼Ò¶¼¿ÉÒÔдµÄµØ·½¡£Èç¹ûÓбðµÄʹÓÃÕâ·ÅÁËÒ»¸öÃûΪ "ls" µÄ³ÌʽÔÚ 
         ÄÇÀ¶øÄã´òÈë "ls" ÄÇÄã¿ÉÄܾÍËÀµÃ·Ç³£ÄÑ¿´ÁË¡£ 
  
         °Ñ "." ·Åµ½ PATH µÄ½áβÊǸö±È½ÏºÃµÄ×ö·¨£º 
  
                 setenv PATH /usr/ucb:/bin:/usr/bin:. 
  
         ÕâôһÀ´£¬µ±ÄãÔÚ "/tmp" Öдò "ls" ±£¬ shell ¾Í»áÏÈÕÒ "/usr/ucb"£¬ 
         "/bin" Óë "/usr/bin" ÀïµÄ "ls"¡£¼õÉÙÁËÒ»µãΣÏÕ¡£²»¹ýÈÔÈ»²»ÊǰٷÖÖ® 
         °Ù°²È«¡£¼ÙÈçÄãÊǸö±¿×¾µÄ´ò×ÖÕߣ¬ÓÐÒ»ÌìÄã°Ñ "ls -l" ´ò³É "sl -l"£¬ 
         ¶øÓÖÓÐÒ»¸ö´ÏÃ÷µÄʹÓÃÕßÄܲµ½ÕâÖÖ³£¼ûµÄ´ò×Ö´íÎó£¬ÔÚ "/tmp" µ×Ï·Š
         ÁËÒ»Ö» "sl"£¬Ä㻹ÊǵÃËÀ¡£ËùÒÔ°¡£¬Ç§ÍòҪСÐÄ¡£ 
 

BBSˮľÇ廪վ¡Ã¾«»ªÇø