首页 >> 读书频道 >> 电脑 >> UNIX常见问题解答(五)
 
· elevation
· volume
· UNIX常见问题解答(六
· voice-family
· 九大技巧,提升XP运行速
· widows
· 全面实战Windows
· size
· Windows Me的系
· 去掉win2000中的c
· 丢失XP密码后的又一招
· XP终极瘦身
 
· 国家六部门联合发文
· 红楼梦:120回全本[清
· 常见图像文件格式详解
· 拉封丹寓言
· 电视剧《刁蛮公主》下载和
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

UNIX常见问题解答(五)


查看有无更新版本

关键字:Unix系列 2006-9-22

 

本篇文章回答以下问题:

5.1) shell 要如何分类呢?
5.2) 在一个 shell script 里面要如?nbsp;"include" 另一个 shell script 呢?
5.3) 是不是所有 shell 都有 alias,有没别的替代方案呢?
5.4) 要如何设定 shell 的变数呢?
5.5) 要如何得知是否是在一 interactive shell 中?
5.6) 那些以 "." 开始其档名的档案在各种 shell 中的用途为何?
5.7) 我想要知道更多各种 shell 的相异之处。请指点明路。


5.1) shell 要如何分类呢?

一般来说,shell 可以分成两类。第一类是由 Bourne shell 衍生出来的包括
sh,ksh,bash,与 zsh。第二类是由 C shell 衍生出来的,包括 csh 与
tcsh。除此之外还有一个 rc,有人认为该自成一类,有人认为该归类在
Bourne shell。

把上面的分类法记住,就可以写出所有 Bourne shell类的 shell 或是所有 C
shell 类的 shell 都可用的 script。


5.2) 在一个 shell script 里面要如何 "include" 另一个 shell script 呢?

由 Bourne shell 衍生者(包括 rc)用 "." 这个指令。由 C shell 衍生者则使
用 "source"。


5.3) 是不是所有 shell 都有 alias,有没别的替代方案呢?

除了 sh 外,主要的 shell 都有 alias,不过用法不大一样。例如有些 alias
不接受参数。

Bourne shell 类中 shell function 虽然严格说来不是 alias,不过也差不多了。
Shell function 还可以做到一些 alias 所做不到的事情。从 Version 7 Unix
的衍生出来的系统(包括 System III 与 4.2BSD) 里面的 Bourne shell 没有
shell function。System V 与 4.3BSD 的 sh 都有 shell function。

用 unalias 来去除 alias, 用 unset 来去除 shell function。


5.4) 要如何设定 shell 的变数呢?

在 C shell 类的 shell 中用 "set variable=value" 来设定只给这个 shell
看的变数,用 "setenv variable value" 来设定环境变数。要去除变数则以
unset 与 unsetenv 为之。在 Bourne shell 类的 shell 中则用
"variable=value" 来设定变数,若要将一变数并成环境变数则用 "export
VARIABLE_NAME"。要去除一个变数则用 unset。


5.5) 要如何得知是否是在一 interactive shell 中?

在 C shell 类中,看看 $prompt 这个变数便知分晓。

在 Bourne shell 类中,可以看 $PS1 这个变数,不过最好是检查 $- 这个变
数。假如 $- 里有 i,那就表示是在 interactive shell 中。作法如下:

case $- in
*i*) # do things for interactive shell
;;
*) # do things for non-interactive shell
;;
esac


5.6) 那些以 "." 开始其档名的档案在各种 shell 中的用途为何?

下面的说明或许不尽完整,但应该讲的都讲了。

csh
有一些版本在系统中所有使用者都必须读取的 .cshrc 与 .login。不
过,每一个版本放置这些档案的地方不大相同。

启动 (依照所列顺序):
.cshrc - 每次都会读取
.login - login shell 才会读取

结束之前:
.logout - login shells.

其他:
.history - 储存history (根据 $savehist 的值决定大小).

tcsh
启动 (依照所列顺序):
/etc/csh.cshrc - 每次都会读取
/etc/csh.login - login shells 才会读取
.tcshrc - 每次都会读取
.cshrc - 假如没有 .tcshrc 在的话
.login - login shells 才会读取

结束之前:
.logout - login shells 才会读取.

其他:
.history - saves the history (based on $savehist).
.cshdirs - saves the directory stack.

sh
启动 (依照所列顺序):
/etc/profile - login shell 才会读取
.profile - login shell 才会读取

结束之前:
any command (or script) specified using the command:
trap "command" 0

ksh
启动 (依照所列顺序):
/etc/profile - login shells 才会读取
.profile - login shells 才会读取
$ENV - always, if it is set.

结束之前:
如果你用了 trap "command" 0,则结束之际会执行 "command" (

bash
启动 (依照所列顺序):
/etc/profile - login shell 才会读取
.bash_profile - login shell 才会读取
.profile - 如果没有 .bash_profile,则会在 login 时读取
.bashrc - interactive non-login shell 才会读取
$ENV - 若有设定则读取之

结束之前:
.bash_logout - login shell 读取之

其他:
.inputrc - Readline 初始化之时
zsh
启动 (依照所列顺序):
.zshenv - 若无 -f 就会读取
.zprofile - login shell 呕岫寥?nbsp;
.zshrc - interactive shell 若无 -f 就会读取
.zlogin - login shell 结束之前

结束之前:
.zlogout - login shell 才会读取

rc
启动 (依照所列顺序):
.rcrc - login shell 才会读取


5.7) 我想要知道更多各种 shell 的相异之处。请指点明路。

你可以用 anonymous ftp 在下列地点取得一份有关 sh、tcsh、ksh、
bash、zsh 与 rc 的详细比较。

cs.uwp.edu (131.210.1.4):pub/vi/docs/shell-101.BetaA.Z
utsun.s.u-tokyo.ac.jp:misc/vi-archive/docs/shell-101.BetaA.Z

这个档案中比较了呼叫 shell 时的旗号、程式的文法、输出/入之转向、与环
境变数。不过这个档案并不讨论以 "." 为档名开头的档案以及环境变数与
函数的继承。

UNIX常见问题解答(五)

[ 1 ]
UNIX常见问题解答(五) num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑