Bash csh 命令提示符

来源:互联网 发布:知乎 唐望 编辑:程序博客网 时间:2024/06/05 14:56

Bash csh 命令提示符颜色及其他

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 运行的通常二者设置大致相同,所以通常前者会调用后者。

原创粉丝点击