Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2160065
  • 博文数量: 361
  • 博客积分: 10828
  • 博客等级: 上将
  • 技术积分: 4161
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-20 14:34
文章分类

全部博文(361)

文章存档

2011年(132)

2010年(229)

分类: LINUX

2010-07-21 17:06:13

1.结果:参考 了很多其他文章的介绍,完成自己的Linux PS1颜色设置:

2.设置文件:

用户是bash shell,vim ~/.bashrc,增加:

PS1='[\u@\e[0;36m\h\e[0m \W]\$'
export PS1

用户是c shell,vim ~/.cshrc,增加:

set colors_1 = "%{\e[0m%}"
#set colors0 = "%{\e[30m%}"
#set colors1 = "%{\e[31m%}"
#set colors2 = "%{\e[32m%}"
#set colors3 = "%{\e[33m%}"
#set colors4 = "%{\e[34m%}"
#set colors5 = "%{\e[35m%}"
set colors6 = "%{\e[36m%}"
#set colors7 = "%{\e[37m%}"
#set prompt="[%n@$colors7%B%m%b %c]%%"
set prompt="[%n@$colors6%m$colors_1 %c]%%"
#set prompt = "$colors1***** $colors2%/ $colors3*** $colors4<%U`whoami`%u@%m> $colors5*** $colors6%h$colors_1 $colors7***** $colors1%P $colors2***\n$colors3%%$colors_1 "

3. C shell 和Bash shell中的详细定义:

3.1)bash的提示符为 PS1 变量, 默认是 环境变量, 下面包含bash为用户在PS1中所使用的符号的一个完整列表:

\a ASCII 响铃字符(也可以键入 \007)  
\d "Wed Sep 06" 格式的日期         
\e ASCII 转义字符(也可以键入 \033)  
\h 主机名的第一部分(如 "mybox")  
\H 主机的全称(如 "")  
\j 在此 shell 中通过按 ^Z 挂起的进程数  
\l 此 shell 的终端设备名(如 "ttyp4")  
\n 换行符  
\r 回车符  
\s shell 的名称(如 "bash")  
\t 24 小时制时间(如 "23:01:01")  
\T 12 小时制时间(如 "11:01:01")  
\@ 带有 am/pm 的 12 小时制时间  
\u 用户名  
\v bash 的版本(如 )  
\V Bash 版本(包括补丁级别) ?/td>;  
\w 当前工作目录(如 "/home/drobbins")  
\W 当前工作目录的“基名 (basename)”(如 "drobbins")  
\! 当前命令在历史缓冲区中的位置  
\# 命令编号(只要您键入内容,它就会在每次提示时累加)  
\$ 如果您不是超级用户 (root),则插入一个 "$";如果您是超级用户,则显示一个 "#"  
\xxx 插入一个用三位数 xxx(用零代替未使用的数字,如 "\007")表示的 ASCII 字符  
\\ 反斜杠  
\[ 这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash 能够正确计算自动换行。  
\] 这个序列应该出现在非打印字符序列之后。

颜色是通过在 PS1 中添加专用序列来选择的 -- 基本上是夹在 "\e["(转义开方括号)和 "m" 之间数字值。如果指定一个以上的数字代码,则用分号将它们分开。
下面是一个颜色代码示例:
"\e[0m"  

如果将数字代码指定为零,则它就会通知终端将前景、背景和加粗设置重置为它们的默认值。您可能会在提示行结束时使用这个代码,以使您键入的文字成为非彩色 的。现在,让我们看一下这些颜色代码。请注意下面的抓屏结果:
  

颜色表  
前景               背景              颜色
---------------------------------------
30             40             黑色
31             41             紅色
32             42             綠色
33             43             黃色
34             44             藍色
35             45             紫紅色
36             46             青藍色
37             47             白色


代码              意义
-------------------------
0                 OFF
1                 高亮显示
4                 underline
5                 闪烁
7                 反白显示
8                 不可见
要使用这个表,首先请查找您要使用的颜色,然后查找对应的前景编号 (30-37) 和背景编号 (40-47)。例如,如果您喜欢黑底绿字,则可将编号分别设为 32 和 40。然后打开您的提示行定义并在其中添加适当的颜色代码。

下面的定义:export PS1="\w> "   变为: export PS1="\e[32;40m\w> "  
到现在为止,提示行尽管已经很不错了,但仍不太完美。在 bash 显示出工作目录以后,我们需要使用 "\e[0m" 序列将颜色重新设置为正常值。  
export PS1="\e[32;40m\w> \e[0m"

3.2)tcsh/csh的设置。
我们可以使用的标记列表有:
!    跟%h一样
%B    开始粗体模式
%b    结束粗体
%c    当前工作目录名称的最后部分, 相当于basename $cwd 或者 ${cwd:tail} ${cwd:t}
%c2, %c3等等 最后2,3(等等)部分
%C    与%c类似,但是使用长形式
%d    本周的当天
%D    今天时当月中的第几天
%h    历史编号
%l    shell的当前控制终端
%U    开始下划线
%u    结束下划线
%/    完整目录名
%~    短格式目录
%m    机器名
%n    登录名
%h    历史编号
%P %p %t %T    时间的不同形式。...

4.注意

1. bash设置变量直接写 x="..."这样,但是tcsh要有set。 %{ %}就相当于bash下的\[ \]

2./etc/profile文件中修改环境变量,在这里修改的内容是对所有用户起作用的,但/etc/profile 文件一旦修改错误,会导致系统启动错误,所以最好在/etc/profile.d中修改:

比如上述内容可以分别建立/etc/profile.d/ 和/etc/profile.d/定义所有用户的PS1.

修改用户根目录下.bashrc/.cshrc文件进行环境变量的编辑,只对当前用户有用

5.关于环境变量定义文件的载入先后顺序:

在登录Linux时要执行文件的过程如下:

在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。因为在 ~/.bash_profile文件中一般会有下面的代码:

if [ -f ~/.bashrc ] ; then

. ./bashrc

fi

~/.bashrc中,一般还会有以下代码:

if [ -f /etc/bashrc ] ; then

. /bashrc

fi

所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。

执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

关于各个文件的作用域,在网上找到了以下说明:

(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件 中搜集shell的设置。

(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。

(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户 的.bashrc文件。

(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

(5)~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户, 而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。

(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。

/etc/profile和/etc/environment等 各种环境变量设置文件的用处


先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。
将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。
用户环境建立的过程中总是先执行/etc/profile然后在读取/etc/environment。为什么会有如上所叙的不同呢?

应该是先执行/etc/environment,后执行/etc/profile。

/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。

系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登录时,你看到的提示信息,象日期、时间信息的显示格式与系统环境的LANG 是相关的,缺省LANG=en_US,如果系统环境LANG=zh_CN,则提示信息是中文的,否则是英文的。
对于用户的SHELL初始化而言是先执行/etc/profile,再读取文件/etc/environment.对整个系统而言是先执行/etc /environment。这样理解正确吗?

/etc/enviroment --> /etc/profile --> $HOME/.profile -->$HOME/.env (如果存在)

/etc/profile 是所有用户的环境变量
/etc/enviroment是系统的环境变量
登陆系统时shell读取的顺序应该是
/etc/profile ->/etc/enviroment -->$HOME/.profile -->$HOME/.env
原因应该是jtw所说的用户环境和系统环境的区别了

如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment)有不同的值那应该是以用户环境为准了。

(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户 的.bashrc文件。
(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5) ~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。
(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。

阅读(8507) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

woxinwuwei28262014-12-01 15:26:05

谢谢,很详细