UNIX的Shell命令详解(二)
3. 前景与背景
在 sh 下面,一个新产生的 process 可以经由 command
後面的符号';'和'&'来分别前景和背景。如以下语法
command
这表示产生一个 foreground 的
process ,你要等到它结束才能再下另一个指令。
command &
这样表示产生一个 background 的
process ,它会给你一个类似以下的讯息:
[1] 21304
然後就出现下一个提示号,以供你给下一个指令。然後在这个
background 的process 结束的时候再给你一个如下面的讯息,告诉你它把这个 process 执行完毕了。
[1] Done
command
command1 ; command2 ; command3
这样表示你要求系统连续执行 command1 ,
command2 , command3 三个指令,其中 command2 要等待 command1 , command3 要等待 command2 ,而你要等待
command3 执行完毕才能下指令。
command1 & command2 & command3
&
这样表示你要求系统连续执行 command1 , command2 , command3
三个指令,而这三个指令都放在背景执行,彼此之间不需等待。
fg 与 bg
也许你会问,一个已经执行的 process
可不可以由前景换背景,或由背景换前景呢?
可以的。一个在前景执行的 process ,你可以按 Ctl-Z 将 process
暂停,系统会给你一个讯息:
Suspended
然後出现提示号。此时你可以使用 fg 将其恢复前景执行,或按 bg
将其改为背景执行。
而如果有一个 background 的 process , 你也可以用 fg 指令将其呼叫到前景来。首先你需用 jobs
指令来观查目前有多少在背景下的 proesses,然後根据它所显示出来的 job id 来决定将那一个 process 放到前景。如使用% fg %3 #
将第三个 job 放到 foreground 。
4. 别名 alias
在 csh 与 tcsh 中,提供 alias
的功能,使得使用者可以将常用却冗长的指令以其他的名字存起,不过不须像储存变数一样要在前面加一个"$"。
alias 的格式:
alias
aliasname string ....
alias aliasname 'string \!* string'
前面的一个格式是把
aliasname 直接用来取代後面的 string ,然後如有任何跟在後面的 argument 将会出现的其後。如下例:
% alias la
ls -Fa
例中的 la . 相当於 ls -F . ,然而如果仅是如此并不足够,因此有後面的另一种格式。後面的格式中的 \!*
代表将来会出现在 aliasname 後面的所有参数,
如下例:
% alias dir 'ls -Flag \!* |
more'
例中的 dir doc 相当於 ls -Flag doc | more ,这样可提供使用者在设计上更大的弹性。
5.
tcsh 的初始设定档
tcsh 有两个 initial 档,一个是 $HOME/.tcshrc , 一个是 $HOME/.login
。
每一个 tcsh 在被开启时,它都会去执行所有位於 .tcshrc 中的命令,因此你可以把所有的 alias , 变数设定都放到
.tcshrc 里面去。在tcsh 起动的时候便会自动的去执行这些对於你的环境的初始设定。
.login 只有在 tcsh 本身是一个 login
shell 的时候才会执行,它多半用来设定一些只需在 login 的时候要执行的命令,如环境变数的设定,因环境变数在设定之後,只要是其子 process
均会取得其环境,因此不须在每次开启 shell 的时候都重覆执行。
tcsh 另有一个结束设定档,称为 .logout ,是在每一个 login
shell 结束,logout 所要执行的动作,其编辑的方法跟 .login , .tcshrc 完全一模一样。
source
指令
如果要重新执行 .tcshrc 的内容,可以利用 source
指令来达到,此时就相当於把该档案中的所有内容重新在命令列输入一遍。如下:
% source .login