精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● UNIX>>◆网络知识◆>>[转载]功能强大的 UNIX Shell -- tcs

主题:[转载]功能强大的 UNIX Shell -- tcs
发信人: [email protected]()
整理人: (1999-08-23 22:21:26), 站内信件
出  处: rose.dlut.edu.cn

首先说明,我喜欢TCSH,在SOLOARIS/OSF下我一直用TCSH,我觉得对于
UNIX的命令行来说,可以少打不少字。今天看到这篇TCSH的说明文章,
希望更多的人用TCSH。
-----------------------------------------------------------------
发信人: kodomo (小小朋友), 信区: 'Unix'
标  题: 功能强大的 UNIX Shell -- tcsh 简介

=== == === == === == === == === == === == === == === == === == === == === ==

[Author]: "wind" on board 'Unix'
 发信站: 交大资科系_BBS (Oct  6 14:02:42 1993)
       似乎没看过有人讨论 tcsh ?
       请问有没有人用过这个 shell ?
       可否描述一下这 shell 的特点,
       值不值得为之舍弃 csh 呢 ?

=== == === == === == === == === == === == === == === == === == === == === ==

[Author]: vvvv@cis_nctu (v) on board 'Unix'

      还有什麽好处我不知道 但是它有类似doskey的功能光这点就让我
      很高兴了!!

=== == === == === == === == === == === == === == === == === == === == === ==

发信人: CHe@ccsun24 (Hansen_Yu), 信区: Unix
标  题: Re: 请问有没有人用过 tcsh ?
发信站: 交大资工天龙新闻社 (Oct  7 17:56:07 1993)
转信站: dragon cis_nctu

C++/ASM/Win Master (william@cis_nctu) wrote:
: ==>[Author]: "wind" on board 'Unix'
: > 发信站: 交大资科系_BBS (Oct  6 14:02:42 1993)
: >
: >       似乎没看过有人讨论 tcsh ?
: >       请问有没有人用过这个 shell ?
: >       可否描述一下这 shell 的特点,
: >       值不值得为之舍弃 csh 呢 ?
: 交大计中通讯 77 期 (82.4.) 有篇「功能强大的 UNIX Shell--tcsh 简介」。
: 由 [email protected] 所写。
转载於下....

           功能强大的 UNIX Shell -- tcsh 简介
                                                       /江海瑜


          Shell,所谓的『命令解译器』,提供使用者和UNIX系统核心沟通的介面程式。
    一个实用而又友善的Shell能够让使用者使用起来得心应手,tcsh就是这样一个功能
 强大而又比较友善的介面程式,尤其从DOS刚进入到UNIX的使用者而言更是如此。因
    为tcsh不但具有csh所有的功能外,更有命令列编修、DOSKEY、命令或档案之完成与
    搜寻等许多功能,对於惯用DOS的使用者而言,无疑是一大福音,而对原来使用csh 的
    使用者来说更是如虎添翼,但是有许多人对於tcsh的功能不甚了解,抑或是根本不知
    道tcsh的存在,因此我将使用tcsh的经验与大家一起分享,希望大家能够多利用tcsh
    的功能,使得使用UNIX成为一件快乐的事。

          tcsh提供了很多新功能,不及备载。以下我将选择几项重要而又实用的功能
    与大家共同分享:

    1.DOSKEY(Visual History)
      可由上下左右四个方向键,观看history list中之命令并可加以修改或执行。
      例如:
        >ls -F
        braver   dragonhose   ryo   tintin*
        >echo "I am Fish!"
        I am Fish!
        >[↑]echo "I am Fish!"

    ※[↑]表示按下方向键 ,以下用中括号括起来皆表示按下一个按键,例如: [TAB],
      [ESC],而^表示按著CTRL(Control)键不放,再按其它键,例□ [^D]表示按著CTRL
      键不放,再按d。
      >ls -F
      按一下 键,再键入l,按[ENTER]
      -rw-------  1 is81026      362 Apr 20 20:01 barver
      -rw-------  1 is81026      434 Apr 20 20:01 dragonhorse
      -rw-------  1 is81026      341 Apr 20 20:01 ryo
      -rwx------  1 is81026      362 Apr 20 20:01 tintin

    2.完成命令或档名(Word Completion)
      在输入命令或档案时,不需输入完整之命令或档名,只需输入命令或档案之部份字元
      ,然後按[TAB],tcsh将会试图找出一个唯一符合你输入字元的命令或档案并帮你完
      成它。若有数个符合的命令或档案时,tcsh将会帮你完成至这些命令或档案的共同
      部份,并发出『毕』的一声警告你,并等待你输入下一个识别字元。
      例如:目前目录下包含下列档案:
        Makefile        bin       cmd       lib       memos
        Makefile.old    chaos.c   cmtest    mail      networks
        bench.c         class     dev       mbox      socket.c
        键入下列命令:
        >vi n[TAB]
        则会出现
        >vi networks   确定之後,按[ENTER]
        因为只有networks符合第一个字母为n之条件,所以tcsh自动帮你找到并完成它。
        如果键入下列命令:
        >vi M[TAB]
        则会出现
        >vi Makefile
        并出现"毕"一声,警告你有两个以上的档案符合,并等待你确定或输入下一个辨
        识字元再按[ENTER],以便寻找你想要的档案。
        >vi Makefile.[TAB]
        >vi Makefile.old
      命令亦可,例如:
        >unc[TAB]
        >uncompress
      要控制tcsh完成档名或命令的动作,可以藉著设定以下几个shell变数来完成:
      (1) recexact:
          这个变数是用来使精确的档案或命令被扩展,而不发出警告声。
          例如:
          假设目前目录下有两个子目录,foo与food,而且recexact这个变数已被设定,
          >cd fo[TAB]
          >cd foo[TAB]
          >cd foo/
          第一次按下[TAB]时,tcsh将其扩展成foo并发出警告声,但第二次再按下[TAB]
          时,tcsh会将其扩展成foo/这个子目录,而不会发出警告声。
          例如: >set recexact
      (2) autolist:
          当这个变数被设定,而如果有数个档案或命令部份符合时,tcsh会将这几个选择
          列出,再供你选择。类似按下Ctrl-D,请参考下一个功能说明。
          例如: >set autolist
      (3) matchbeep:
          这个变数是用来控制何时发出警告声,也就是『毕』的一声,它具有下列几个值
          可供设定:
          nomatch: 为找出符合的档案或命令时,发出警告声。
          ambiguous: 有很多档案或命令符合时,发出警告声。
          notunique: 找到一精确符合的,但还有其他较长而且符合的档名或命令时,发出
                     警告声。
          never: 无论在任何情况下都不发出警告声。
          例如: >set matchbeep=nomatch
      (4) autoexpand:
          根据使用者键入的字元,自动参考history list的命令,寻找并将其扩展成第一
          个符合的命令。
          例如: >set autoexpand
      (5) autocorrect:
          如果这个变数被设定,tcsh会根据可能之档案路径,替你更正可能的错误。
          例如: >set autocorrect

    3.命令或档案之搜寻(List Possible Word)
      列出前几个字元符合你所键入字元的命令或档案。
      例如:
      (1) 目前目录下之档案与2.相同
          >vi c[^D]
          chaos.c     class      cmd*     cmtest/
          按下[^D]後,tcsh会列出所有c 开头的档案。
          档案後之特殊符号分别表示各种性质不同的档案:
          /  -> 目录(Directory)           |  -> 序列(Queue)
          *  -> 执行档(Executable file)   %  -> 字元设备档(Character Device)
          @  -> Symbolic link             #  -> 区块设备档(Block Device)
          =  -> Socket
      (2) >b[^D]
          b2g         bbfig       beach-ball2    biff             bitmap
          bar         bc          bg             bind             bmtoa
          basename    bdftopcf    bggen          bindkey          break
          bash        bdftops     bgplot         bindkey-command  breaksw
          batch       beach-ball  bibtex         bison            builtins
          将会列出所有以b 开头的命令及目前目录下以b 开头的档案。
      (3) >~[^D]
          将会列出目前系统所有的帐号(login name)。
      (4) >cd /usr/op[^D]
          >cd /usr/openwin/
          将会列出符合之路径。

    4.命令列编修(Command Line Editing)
      tcsh提供类似GNU Emacs或VI的控制键来修改目前命令列之命令,其预设值为使用
      GNU Emacs的控制键,但是使用者可利用bindkey命令将控制键改为VI模式,或是依
      各人之喜好定义出自己认为方便的控制键。
      关於 GNU Emacs 与 VI之控制键定义请查相关资料。

      * 定义自己的控制键
          使用者可利用bindkey命令,来定义自己需要或惯用的控制键,或是将某个按键
          定义成常用的UNIX命令,甚至连使用者常用的字串亦可定义。
          语法: bindkey [-a] [-c] [-s] [-v] [-e] [-d] [-k] [-l] [-r] [--]
                        [[in-string | key-name][out-string | command]]
          说明: -a :
                -s : 指定输出用某一字串取代,而非执行tcsh所提供之控制命令,类
                     似alias的功能。
                -c : 指定输出用某一UNIX命令取代并加以执行。
                -v : 将控制键命令对照方式设为VI模式。
                -e : 将控制键命令对照方式设为Emacs模式。
                -k :
                -d :
                -l : 列出可指定之控制命令。
                -r : 将某一已定义之控制键移去。
          例如:
            >bindkey "[HOME]" beginning-of-line
            将[HOME]这个键定义为移至一行之开头,以後当你在做命令列编修时,按下
            [HOME],游标就会移至该命令列之开头。

            >bindkey -r "[HOME]"
            将[HOME]这个键的定义移去。
            >bindkey -s "^F" I_am_Fish!
            将Ctrl-F定义为I_am_Fish!这个字串,当你按下该键时,萤幕上会显示出
            I_am_Fish!这个字串。

            >bindkey -s "^X" ls -alF
            将Ctrl-F定义为执行ls -alF这个UNIX命令。


    5.周期性命令之执行(Periodic Command Execution)
      藉著设定shell变数tperiod与代名(alias)periodic,可执行周期性之命令。
      语法: set tperiod=<minute(s)>
            alias periodic <command>
      说明: <minute(s)> 时间间隔,以分钟为单位。
            <command>   欲执行之命令。
      例如:
      >set tperiod=30
      >alias periodic checknews
      tcsh将会每隔30分钟执行checknews这个命令一次。

    6.时间性事件列表(Timed Event List)
      tcsh提供了一个命令sched,让你能在每天特定的时间执行某个命令,其功能类似
      UNIX上原有之crontab的功能。
      语法: (1)sched [+]hh:mm <command>
            (2)sched
            (3)sched -<number>
      说明: (1)[+]hh:mm   欲执行命令之时间,+表示过了中午12:00,或可利用'am'或
                          'pm'来指定,例如:8:00表示早上8:00,亦可用8:00am来表示,
                          而+3:30表示下午3:30,亦可用3:30pm来表示。
               <command>  欲执行之命令。
            (2)不加任何参数,则列出已指定时间之命令。
            (3)用以去除某一已设定之命令,<number>表示该命令在list中之编号。
      例如:
      (1)>sched 11:50 echo It\'s time to eat lunch.
         >sched 5pm set prompt='[%h] It\'s after 5; go home: >'
         於早上11:50在萤幕上印出It's time to eat lunch.,而在下午5:00时,将提示
         符号(prompt)改为[26] It's after; go home: >,26是该命令history list中
         的号码。
      (2)>sched
             1  Wed Apr  4 15:42  /usr/lib/uucp/uucico -r1 -sother
             2  Wed Apr  4 17:00 set prompt=[%h] It's after 5; go home: >
         >
         将会列出目前所有以设定时间与命令的对照表。
      (3)>sched -3
         Not that many scheduled events.
         >sched -2
         >sched
             1  Wed Apr  4 15:42  /usr/lib/uucp/uucico -r1 -sother
         >
         将scheduled list的第二项移去。

    7.自动断线或锁住萤幕(Automatic Logout/Locking)
      当你忘记logout或idle太久时,tcsh会根据你所设定的时间替你logout或lock你的
      萤幕,使你的档案不会被其他的人窜改或删除。设定的方法是利用变数autologout
      来设定你所希望logout或lock萤幕的时间。
      语法: set autologout=<logout-minute(s)>
            set autologout=(<logout-minute(s)> <lock-minute(s)>)
      说明: <logout-minute(s)> 希望idle几分钟之後自动logout,预设值为60分钟。
            <lock-minute(s)>   希望idle几分钟之後自动lock,无预设值。
      例如:
      (1)>set autologout=30
         tcsh会在你idle30分钟後显示auto-logout并自动帮你logout。
      (2)>set autologout=(20 3)
         除了在你idle20分钟後,tcsh自动帮你logout之外,你每idle3分钟,tcsh会将萤幕
         lock住,并询问你密码,在密码输入错误五次之後,tcsh会自动帮你logout,以保护
         你宝贵的资料。

    8.观看上线状况(Watching for Logins and Logouts)
      有的人每次上线时,都会利用rusers或who指令来观看是否有认识的人在线上,然後
      再予他(她)交谈(talk),但一直用rusers或who来看似乎有点麻烦,现在这些人有福
      了,因为tcsh提供了可以让你每几分钟就知道他(她)是否已经上线的功能。这个功
      能是利用设定特殊的shell变数来达成的。
      语法: set watch=(<minute(s)> <login> <terminal> <login> <terminal> ....)
      说明: <minute(s)> 时间间隔,以分钟为单位,省略时,预设值为10分钟。
            <login>     使用者帐号。
            <terminal>  使用者所在的终端机。
            此外,还有一特殊的字'any',可用来指定所有的使用者或终端机。
      例如:
      (1) >set watch=(sys ttyp0 root console)
          tcsh会向使用者通知在终端机/dev/ttyp0上是否有sys login或logout,还有主
          控台(console)上是否有root login或logout。
      (2) >set watch=('b*' any any ttyp5)
          tcsh会向使用者通知在这部机器的任一个终端机上是否有以b为开头的帐号
          login或logout,还有在终端机/dev/ttyp5上是否有任何一个使用者login或
          logout。
      (3) >set watch=(any any)
          tcsh会向使用者通知在这部机器的任一个终端机上是否有任何一个使用者
          login或logout。
      (4) >set watch=(40 any any)
          每隔40分钟,tcsh会向使用者通知在这部机器的任一个终端机上是否有任何一
          个使用者login或logout。

    9.新提示符号格式(New Prompt Format)
      在设定提示符号方面,tcsh利用"%<char>"定义了许多新的格式,例如:时间、所在目
      录等。类似C语言中printf函数的用法。这些符号的意义请利用 man 命令查询。

      □例:
      >set prompt="%m [%h] %U[%@]%u [%/] you rang? "
      cissun10 [26] [11:35pm] [/usr/accts/sys] you rang? _


後记: 本人才疏学浅,文中若有任何错误,请各位不吝赐教。
      E-mail Address: [email protected] 资讯科学系 江海瑜

=== == === == === == === == === == === == === == === == === == === == === ==

发信人: alva@cis_nctu (al), 信区: Unix
标  题: Re: 请问有没有人用过 tcsh ?
发信站: 交大资科系_BBS (Oct 11 22:51:20 1993)
转信站: cis_nctu

==>[Author]: "jsshue" on board 'Unix'
> :       似乎没看过有人讨论 tcsh ?
> :       请问有没有人用过这个 shell ?
> :       可否描述一下这 shell 的特点,
> :       值不值得为之舍弃 csh 呢 ?
 ..
> 以使用而言,tcsh 很方便!!但写shell script 就比不上 sh 啦!!
> 但csh 和 tcsh 都很相c的语法,看看就会写tcsh shell script 了!!
> sh则是普遍性与shell script 的能力优於tcsh&csh!!

  UNIX 的 shell 有两大主流, 一 为 Bourne shell:
/bin/sh  一为 csh  /bin/csh. 此二 shells 已老迈,
但极有权威. 分别繁衍不少後代. 但 sh 的子孙似较多.
如 ksh, zsh, bash, 皆很活跃. 而 csh 之後代似仅
tcsh 较著名. 名著 "Life with UNIX" 作者Don Libes 提起
说, "有很多人两类shell都用. 用sh写script, 用csh做
interactive shell." "csh号称模仿C语言, 可是写
script 的人[他们当然大都都是 C 的行家], 往往觉
得还是 sh 好用"

  tcsh 是 csh 的 superset. 有 tcsh 可用, 当然改用
tcsh. 如果是习惯 sh 的人, 可以改用 GNU 的好东西
bash (Bourne again shell). 完全不用任何设定就有 doskey
那种功能了. 多愉快. 还有种种奇妙功能, 说之不尽.
(man page 共 2451 页!)

  但Internet 上送 shell script 给人用绝大多数仍用 sh
写. 正是著眼於其最普遍, 为UNIX世界任何机器上之绝对
存在物.

  还没开始玩 UNIX, 就会 C 了. 但玩 UNIX 至今仍
一直亲近 sh 家族的人. 因为我是玩 Linux 才对 UNIX
发生真正的兴趣的. (可以过过小小 super user 的瘾),
而Linux上的标准shell 正是 bash. 再加上後来读了经典
K&P 的 The Unix Programming Environment 书虽老, 其启发性
却历久弥新. 他的 script 都是用sh写的.

  又: 写 GNU 的软□的高手们真是一群大好人. 大家多多支持.
他们的软□非常好用. 可至 ftp.edu.tw  UNIX/GNU 看看.

=== == === == === == === == === == === == === == === == === == === == === ==

---
         红      尘      有      爱
 □□□□□□□□□□□□□□□□□□□□□□□□□□
 □□    美  丽  的  梦                          □□
 □      留  下  美  丽  的  忧  伤              □□
 □□  □人  间  天  上  、  代  代  相  传      □□
 □□□□□□□□□□□□□□□□□□□□□□□□□□

--
☆ [Origin: ◎椰林风情◎] [From: woju.g1.ntu.edu.tw ] [Login: **] [Post: **]

--
※ 来源:.碧海青天 bbs.dlut.edu.cn.[FROM: 202.118.65.49]

[关闭][返回]