歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> TCSH shell變量和特征配置

TCSH shell變量和特征配置

日期:2017/3/3 16:44:06   编辑:關於Linux

TCSHshell可以使用戶使用shell配置變量和特征配置自己的shell.也可以使用set命令設置特征.TCSH也有注冊,注消以及何時進入TCSHshell的配置文件.

一、TCSH shell 特征

TCSH有幾個特征,允許控制不同的shell操作的方法.TCSH shell特征不僅包括許多它自己的特征,而且還包括KSH/BASH shell中的特征,如,TCSH中有一個noclobber,防止重定向重寫文件,一些更常用的特征為:echo,noclobber,ignoreeof和noglob.通過定義和取消定義與該特性相關的變量,打開/關閉TCSH shell特征,為每個特征命名變量.

例如,通過定義noclobber變量,打開noclobber特征.使用set命令定義變量,而使用unset命令取消定義變量.為了運行noclobber特征,使用set noclobber,為了關閉它,使用unset noclobber.如:

set variable 定義變量
unset variable 取消變量

由於這些變量常用於打開/關閉特征,所以有時也被叫做雙態切換.

1、echo

在echo被執行之前,設置echo啟動顯示命令的特征;

set echo 打開echo特征
unset echo 關閉echo特征

2、ignoreeof

設置ignoreeof啟動防止用戶使用CTRL+D注消用戶shell的特征,它用於防止突發性的注消操作,如果此特征關閉,可以用CTRL+D注消過程.由於在標准輸入中CTRL+D是結束用戶輸入的操作,所以很容易造成突發注消shell進程.因此,ignoreeof特征就能防止這種突發的注消,當此特征被設置後,用戶必須用logout命令明確注消.

3、noclobber

設置noclobber啟動預防現有文件不被重定向輸出的特征,借助此特征,如果把輸出重定向到已經存在的文件中,就不用標准的輸出重寫文件.原文件被保存.也許會發生這種情況:把現有文件名用作保存被重定向的輸入的文件名.因此,noclobber特征使用戶不會意外的重寫原文件.

%set noclobber
%cat oldfile > newfile
newfile: file exist

有時,用戶想用重定向輸出重寫某個文件,那麼就可在重定向符號操作符之後放置驚歎號!實現重寫操作.這將重寫noclobber特性,用標准的輸出代替文件內容.

%cat oldfile >!newfile

4、noglob

設置noglob使某特性有效,該特征禁止用戶shell中的某些字符.字符 * ? [ ] ~將不再擴展為匹配的文件名.如:

%set noglob
%ls myfile?*
myfile?*

5、附錄:常用的TCSH shell特征;

特征 功能
set 打開shell特征
unset 關閉shell特征
echo 執行命令前顯示該命令
ignoreeof 禁止用CTRL+D注消
noclobber 不必通過重新定向重寫文件
noglob 禁止特殊字符用於文件名擴展:* ? ~ [ ]
notify 當完成後台任務時立即通知用戶
verbose 歷史命令引用後顯示命令

二、TCSH shell 變量

正如在BASH shell中一樣,也可在TCSH shell中使用特殊shell變量來匹配自己的系統.一些變量在系統初始化中定義,也可以在shell中用新的值重新定義變量,有些必須在系統初始化時定義,如最常用的特殊變量prompt變量,它允許建立自己的命令行提示符另外一個是history變量,該變量確定保存了多少歷史命令/事件.

在TCSH shell中,許多特殊變量的名稱與函數都與BASH/ZSH shell中的變量名稱和函數類似.一些必須用大寫表示,但是大多數用小寫表示.某些特殊變量起類似的作用,但是具有完全不同的實現方法,如mail變量保存的信息與BASH shell的MAIL,MAILPATH,MAILCHECK變量保存的信息完全相同.

1、prompt prompt2 prompt3

這三個變量為命令行保存提示符.用戶可以設置自己想要的符號/字符串作為提示符.為了設置命令行提示符,可以用

%set prompt="+"
+

這樣提示符就變成了+號.也可以使用預定義的一組代碼使得配置提示符更容易,在每個代碼前加個%號,例如,用%/表示當前的工作目錄,%t表示時間,%n表示用戶名,%!表示下一個歷史事件的號碼,如:

%set prompt="%/"
/home/dirname

代碼列表:

代碼 說明

%/ 當前運行目錄
%h,%!,! 當前歷史號碼
%t 當天時間
%n 用戶名稱
%d 日期
%w 當前月份
%y 當前年份

當命令分為若干行輸入時,變量prompt2被用於特殊情況,為需要輸入改命令而增加的行顯示prompt2,prompt3提示符用於檢查拼寫特征是否被激活.

2、cdpath

cdpath變量保持目錄的路徑名,用cd搜索特定的子目錄,這些路徑名形成一個數組,就像賦值給TCSH shell的path變量的路徑名數組一樣,注意在路徑名之間要求有空格.

%set cdpath=(/usr/bin /var/bin /home/username)

3、history和savehist

正如前面了解的那樣,history變量常用於確定要保存的歷史事件的數量,只需給該變量賦值history應該記錄的事件的最大的數值.當達到最大值時,計數器從1開始.但是當注消時,savehist變量保存存儲在.history文件中事件的數量,當再次注冊時,這些事件

就成為初始化歷史事件.如:

%set history=20
%set savehist=5

當注冊時,歷史列表中將記錄20個事件,但是當注消後,僅僅最後5個事件被保存在.history文件中,下一次注冊時,歷史列表將由以前的最後5個命令組成.

4、mail

在TCSH shell中,mail變量綜合了BASH和ZSH shell中的MAIL,MAILCHECK,MAILPATH變量的特征.TCSH shell mail變量值是一個數組,該數組的元素既包括檢查電子郵件的時間間隔,又包括檢查電子郵箱文件的路徑.要給這些元素賦值,可以把賦值的數組賦值給mail變量,用圓括號括起來,空格分割的一系列指定數組的新值.第一個值是再次檢查電子郵件前設置等待的秒數,它類似BASH shell的MAILCHECK變量保存的數組.其余的值由電子郵箱文件的路徑構成,檢查該文件獲取郵件.注意,這些變量保存了BASH和ZSH shell MAIL,MAILPATH變量的功能. 如:

%set mail ( 1200 /usr/mail/user)

mail變量被設置成每1200秒檢查一次電子郵件,被檢查的電子郵箱文件在/usr/mail/user目錄中.

%set mail (1200 /usr/mail/user /home/userdir)

也可以容易的給mail數組添加更多的郵箱文件路徑,注意每個元素之間的空格.

5、附常用的TCSH shell配置變量:

變量 說明
home 用戶主目錄的路徑名
user 注冊名
pwd 當前運行目錄的路徑名
shell 用於注冊過程的程序路徑名
prompt 主提示符
path 目錄路徑名列表,搜尋目錄獲取可執行命令
mail mail實用程序檢查該變量來獲取接受信息的郵件文件名
cdpath cd命令搜索該變量獲取子目錄的目錄路徑名
history 歷史列表中命令數量
savehist 為下一個注冊存儲歷史列表中的命令數量
EXINIT EX/vi編輯器的初始化命令
TERM 終端名

三、TCSH shell初始化文件

TCSH shell有3個初始化文件: .login .tcshrc .logout,.login文件是每次注冊時執行的注冊初始化文件, .tcshrc文件是每次進入TCSH shell時執行的shell初始化文件, 該文件在注冊時執行或者用tcsh命令直接從另一個shell進入TCSH shell時

執行,每次注消時執行.logout文件

1、 .login

TCSH shell有自己注冊初始化login,該文件用於配置用戶shell的shell命令和特殊變量定義, .login文件相當於BASH和ZSH shell中使用的.profile文件。

.login文件包含setenv命令,給TERM之類的特殊環境變量賦值,可以用任何標准的編輯器編輯它,改變這些值,也可添加新的值.但是要記住:在TCSH shell中,為環境變量賦值的命令是setenv,如:

%setenv EXINIT 'set nu ai'

定義EXINIT變量並設置vi編輯器行計數和自動縮排的功能.

當編輯.login文件時要十分小心,不經意的編輯可能造成錯誤的變量設置或者根本沒有設置變量,因此,編輯之前最好備份.login文件.如果更改了.login文件,想讓這些變化在當前注冊期間生效,需要使用source命令重新執行該文件,source命令實際上可執行

任何初始化文件,其中包括.tcshrc文件和.logout文件,如:

%source .login

2、 .tcshrc

每當進入TCSH shell或產生任何子shell時,就執行.tcshrc初始化文件,如果TCSH shell是用戶注冊的shell,那麼當用戶注冊時, .tcshrc文件和.login文件一起運行,如果從另外一個shell進入TCSH shell, .tcshrc文件被自動執行,文件中包含的變量

和別名被定義.

實際上,每當產生一個shell時,如運行shell腳本,就執行.tcshrc文件,也就是說,每當創建一個shell時,就執行.tcshrc文件,這允許在.tcshrc中定義局部變量,在某種意義上說,局部變量可以進入任何子shell,即時像history這樣的用戶定義的變量也是局部變量,但要為每個產生的子shell定義特殊變量,這樣,為每個子shell變量設置history,但是,每個子shell都有自己的局部history變量,用戶甚至可在不影響其他子shell的變量的情況下改變一個子shell的局部history變量,在shell初始化文件中定義特殊變量可以看做是BASH shell導出變量,在BASH shell和ZSH shell中的導出變量只把自己的拷貝傳送給子shell,改變拷貝不會影響原始定義.(編程入門網)

.tchsrc文件也可包含別名變量和用於打開shell特征的特征變量,別名變量和特征變量是局部變量,限定於shell內部.但是.tcshrc文件在每個shell中都將定義這些變量.因此, .tcshrc文件通常保存各種命令定義的別名,如:

.tcshrc

#
set shell=/usr/bin/csh
set path=$PATH (/bin /usr/bin .)
set cdpath=(/home/dirname/filename /home/dirname/files)
set prompt="!$pwd>"
set history=20
set ignoreeof
set noclobber
alias rm 'rm -i'
alias mv 'mv -i'
alias cp 'cp -i'

與環境變量不同,局部變量用set命令定義,在.tcshrc文件中的局部變量應該使用set命令定義,用setenv命令定義的環境變量是放在.login文件中的,請記住:當改變path或cdpath的路徑名時,數組中包含這些路徑名,數組中的每個元素要用空格分開,如果添加新的路徑名時,必須保證用空格把它和其他的路徑名分開.如果已經改變了.tcshrc文件,希望這些變化在當前注冊中立即生效,別忘了用source命令重復執行.tcshrc文件。

3、 .logout

.logout文件也是初始化文件,只不過它在注消時執行,用戶可以設置.logout文件以使其完成任何在注消時想要完成的操作,文件中沒有定義變量,常包括關閉進程的shell命令.可以向.logout文件中添加自己的shell命令,如:

.logout

#
clear
echo "Good-bey..."

Copyright © Linux教程網 All Rights Reserved