Board logo

标题: tcsh shell 变量(1) [打印本页]

作者: look_w    时间: 2018-5-23 17:37     标题: tcsh shell 变量(1)

tcsh 是原来的 Berkeley UNIX C shell 的改进版本,它是最流行的 UNIX shell 之一。本文讨论 tcsh 提供的一些功能:它提供的 shell 变量可以减少几个常规任务花费的时间,还提供了一些高级的安全特性,比如监视用户及其命令历史。本文描述的所有命令和脚本都用 tcsh 6.15 测试过(参见 )。
如何设置 shell 变量tcsh 提供几个内置的 shell 变量。其中一部分(比如 rmstar 和 noclobber)是布尔值,所以建议用 set <variablename>  打开它们。对于 prompt 等其他内置变量,需要使用 set <variablename>=<value> 提供一个值。使用 unset <variablename> 取消变量。清单 1 给出一些基本示例。
清单 1. 如何设置/取消 shell 内置变量
1
2
3
4
5
6
tcsh# set prompt="arpan@tintin# "
arpan@tintin# set autologout=1
arpan@tintin# unset prompt
echo $autologout
1
<prompt has disappeared due to unset operation>




下面几节讨论 tcsh 通过 shell 内置变量提供的一些最有用的特性。
用 rmstar 预防灾难在 UNIX 中,造成混乱的最常见原因可能是意外地执行了 rm *。大多数用户在使用 rm 命令时不使用 -i 选项,因此会立即删除文件。tcsh 定义了一个 shell 变量 rmstar;如果打开这个变量,在用户执行操作时会显示提示,要求用户确认操作。但是,如果用户在命令提示下运行 rm –f *,就不会出现确认提示。清单 2 演示 rmstar 的用法。
清单 2. 使用 rmstar shell 变量
1
2
3
4
5
6
7
8
9
10
11
12
13
arpan@tintin# pwd
/home/arpan/scratchpad
arpan@tintin# ls
file1 file2
arpan@tintin# set rmstar
arpan@tintin# rm *
Do you really want to delete all files? [n/y] n
arpan@tintin# ls
file1 file2
arpan@tintin# unset rmstar
arpan@tintin# rm *
arpan@tintin# ls
arpan@tintin#




防止意外覆盖现有的文件造成混乱的另一个典型场景是意外地覆盖现有的文件。为了防止发生这种情况,应该一直打开 shell 变量 noclobber。(这个变量在 csh shell 中也可用)。注意,这只能防止把输出重定向到现有文件;如果使用 cp 或 mv 覆盖文件,这个变量没有任何帮助。见清单 3。
清单 3. 使用 noclobber 防止意外覆盖文件
1
2
3
4
5
6
7
8
9
arpan@tintin# ls
file1 file2
arpan@tintin# set noclobber
arpan@tintin# echo testing > file1
file1: File exists.
arpan@tintin# unset noclobber
arpan@tintin# echo testing > file1
arpan@tintin# cat file1
testing




还要注意,shell 操作符 >> 和 >! 不考虑 noclobber 的设置。前一个操作符在现有文件中追加内容(所以仍然可以恢复数据),后者覆盖现有内容。
自动 Tab 补齐当在 shell 提示上输入命令时,可以只输入命令字符串的一部分,然后按 Tab,shell 会自动补齐命令字符串或者给出可用的选择,这会显著加快输入速度。这个功能对于长文件名尤其有意义;可以只输入前几个字母并让 shell 补齐文件名。为了启用这个特性,需要设置 shell 变量 autolist。清单 4 给出一个示例。
清单 4. 使用 autolist 启用自动命令补齐
1
2
3
4
5
6
7
arpan@tintin# ls
this_is_a_big_file test.c threads.h
arpan@tintin# set autolist
arpan@tintin# vi t[TAB]
this_is_a_big_file test.c term.h
arpan@tintin# vi th[TAB]
this_is_a_big_file threads.h




在这个示例中,[TAB] 表示按 Tab 键。在 shell 提示上输入 vi thi[TAB],shell 会把 thi[TAB] 扩展为 this_is_a_big_file。
使用 addsuffix 在 Tab 补齐期间区分目录如果同时设置 addsuffix shell 变量和自动 Tab 补齐,那么在找到匹配时 tcsh 会在文件夹后面加上一个 / 字符,这样就更容易区分出文件夹。它在一般文件后面加一个空格。在清单 5 所示的情况中,有一个名为 documents 的文件夹,这个文件夹中有一个名为 deliverables 的文件;用户输入 do[TAB],shell 就会显示 documents/。如果取消 addsuffix 变量,tcsh 就只显示 documents,这对于判断 documents 是一般文件还是文件夹很不方便。
清单 5. 在使用 autolist 的同时使用 addsuffix 区分文件夹
1
2
3
4
5
6
7
8
9
10
11
arpan@tintin# ls
documents deliverables
arpan@tintin# set autolist
arpan@tintin# ls do[TAB]
arpan@tintin# ls documents
arpan@tintin# set addsuffix
arpan@tintin# ls do[TAB]
arpan@tintin# ls documents/
arpan@tintin# unset autosuffix
arpan@tintin# ls do[TAB]
arpan@tintin# ls documents






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0