2019年8月16日 星期五

Linux shell 提示及修改

1.Linux shell提示
众所周知,每当shell准备好接收输入命令时,它就显示一个提示。您是不是可以修改这个提示?实际上,在提示上有广泛的自由,而且一些人已经开出一些精美的提示,可以显示颜色以及各种不同类型的信息。我们先从简单的入手,然后在讨论比较复杂的定制。
最初,所有的shell都是两个字符的提示:一个字符后跟一个空格。Bourne shell使用一个$(美元)字符,C-shell使用一个%(百分比)字符。现在,这一传统仍然保持。因此,如果使用的shell是Bourne shell家族(Bash、Korn shell)中的一员,那么简单的shell提示为:


$ date
这里在提示之后键入了date命令,以便显示$之后的空格。空格属于提示的一部分。
如果使用的C-shell或者Tcsh,那么简单的shell提示为:

% date

尽管C-shell家族传统上指定%字符作为shell提示,但是许多Tcsh用户使用>(大于号)字符,从而提醒用户该shell是一个增强版本的C-shell:

> date

最后一个惯例与超级用户相关。当以root登录时,不管使用的是哪一种shell,shell提示总是一个#字符。这样做的目的就是提醒您是一名超级用户,需要额外小心:

# date

在继续之前,请看下表,该表汇总了各种基本提示。这里只有少数几个约定,因此,您可以记住它们的含义。从而无论何时,当看到shell提示时,都可以立即回答下述两个问题:(1)您是以超级用户登录吗?(2)如果不是,那么您使用的是哪种类型的shell?
根据惯例,标准的shell提示由一个字符及其后面的一个空格组成。Bourne shell家族使用一个$(美元)字符,C-shell家族使用一个%(百分比)字符。唯一的例外就是Tcsh,有时候它使用一个>(大于号)字符。当作为一个超级爱用户登录时,将看到一个#(hash)字符,不管使用的时哪一种shell。

2. Linux Shell修改 
正如上一节中所解释的,修改某个变量的值就能修改shell提示。对于Bourne shell家族来说,需要修改一个名为PS1的环境变量。对于C-shell家族来说,需要修改一个名为prompt的变量。
我们从一个简单的例子开始。下面时一条命令。该命令适合于Bourne shell家族,将shell提示设置为一个$(美元)字符后面一个空格:

export PS1= “$ ”

同样,下面时一条适合于C-shell家族的命令,它使用标准的%(百分比)字符:

set prompt = “% ”

如果是Tcsh用户,则可能习惯使用>(大于号)字符:

set prompt = “> ”

变量有两种类型:全局变量和局部变量。全局变量称为“环境变量”。局部变量称为“shell变量”。
所有的Bourne shell都将提示的值存储在一个叫PSI的环境变量中。使用export命令可以修改环境变量的值。因此,要学习上面的export命令。请注意该命令的语法,特别是=(等号)字符的前后都不能有空格。
所有的C-shell都将提示的值存储在一个叫prompt的shell变量中。在C-shell中,使用set命令修改shell变量的值。因此,要学习上面两条set命令。
此时,您可能奇怪,Bourne shell使用环境变量(全局)存放提示,而C-shell使用shell(局部)变量存放提示,这样有意义吗?通常,这并不重要,当修改shell提示时,只要使用合适的命令(export或者set)即可。但是,它们之间的区别在讨论初始化文件时特别重要,初始化文件时每次登录时帮助自动设置提示的文件。
到目前为止,我们只是对shell提示进行简单的修改。但是,通过操纵合适的变量,可以按照自己的希望任意设置shell提示。例如,可以设置shell提示显示一个有趣的消息。

export PS1=“Enter a command please, Harley$ ”
set prompt = “Enter a command please Harley$ ”


实际上,有趣的shell提示会很快失去吸引力。下面时一些更有用的提示:在提示中显示shell的名称(它适合于使用自己的特定shell的情形)。

export PS1=“bash$ ”
export PS1=“ksh$ ”
set prompt = “csh% ”
set prompt = “tcsh>


下面时这些命令生成的提示:

bash$
ksh$
csh%
tcsh>


这种类型的提示对于超级用户特别方便。例如,假设用户标识root使用Bash作为默认shell。如果设置shell提示如下:

export PS1=“bash$ ”

那么提示将为:

bash#

#将提醒您时一名超级用户,而名称提醒您正在使用哪一种shell。
除了使用单词和字符,还有其他3种方法来增强shell提示。您可以:
将变量的值插入到提示中。
利用转义字符使用各种特殊码
将命令的结果插入到提示中(这就是所谓的命令替换)。
以上每种技巧都有自己的重要性,而且其价值也远不止修改shell提示。基于这一原因,我们会接着讨论各种思想,从而是您能够理解普遍原则。

沒有留言:

張貼留言