免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6036 | 回复: 5
打印 上一主题 下一主题

怎么配置 C shell 中命令提示符? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-13 13:14 |只看该作者 |倒序浏览
怎么配置 C shell 中命令提示符? 诸如颜色,字体之类;

搜索到的方法都讲的 bash 中用PS1 环境变量,但C shell中似乎没有这个变量。

望达人指点,感谢!

[ 本帖最后由 longer0116 于 2008-11-13 13:17 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-11-13 14:12 |只看该作者
c shell 中的对应的变量是 prompt  prompt2 prompt3

论坛徽章:
0
3 [报告]
发表于 2008-11-13 17:05 |只看该作者
原帖由 seeLnd 于 2008-11-13 14:12 发表
c shell 中的对应的变量是 prompt  prompt2 prompt3



你好,我echo了一下这三个变量,内容好像有 %R?、 CORRECT >%R? 之类,看不懂。

所以再请教:

1. 可否解释一下应该怎样设置?
2. 有没有针对这个的具体点的资料可以看,网页或者电子档最好,希望推荐一下。

感谢!

论坛徽章:
0
4 [报告]
发表于 2008-11-13 20:13 |只看该作者
本帖最后由 longer0116 于 2013-03-19 17:24 编辑

根据 seeLnd 的 prompt关键字,自己在网上搜(prompt + tcsh)到了方法:

我的最后结果是这样的: set prompt = "%B%{\e[32;46m%}%m %{\e[33;46m%}%~ >%{\e[0m%} "

(注意:最后的“}”后面还有个空格,没有结果可能会有点不一样)
   1. %m 表示主机名,可以换成 'hostname' ;%~ 表示当前目录,可以换成'pwd' (更多细节请下面)
  2. %B ... %b 表示加粗;
  3. %{ ... m%} 设置颜色;(具体看下面)

###########################################################################

下面是搜来的一篇具体说明:

《 tcsh, bash定制自己的提示符 》  (from http://blog.chinaunix.net/u2/66983/showart_1226396.html

这几天, 看 unix超级工具 一书, 上面提到 设置自己的提示符, 于是便对改变自己的shell提示符号起了兴趣, 想搞一个有意思的提示符。 以下 我便把我自己的经验写下来, 一来 做个笔记, 以便复习, 二来, 希望帮助 对这个话题有兴趣的人。

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

\a ASCII 响铃字符(也可以键入 \007)  
\d "Wed Sep 06" 格式的日期            
\e ASCII 转义字符(也可以键入 \033)  
\h 主机名的第一部分(如 "mybox")  
\H 主机的全称(如 "mybox.mydomain.com")  
\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 的版本(如 2.04)  
\V Bash 版本(包括补丁级别) ?/td>;  
\w 当前工作目录(如 "/home/drobbins")  
\W 当前工作目录的“基名 (basename)”(如 "drobbins")  
\! 当前命令在历史缓冲区中的位置  
\# 命令编号(只要您键入内容,它就会在每次提示时累加)  
\$ 如果您不是超级用户 (root),则插入一个 "$";如果您是超级用户,则显示一个 "#"  
\xxx 插入一个用三位数 xxx(用零代替未使用的数字,如 "\007")表示的 ASCII 字符  
\\ 反斜杠  
\[ 这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash 能够正确计算自动换行。  
\] 这个序列应该出现在非打印字符序列之后。  

我所使用的的提示符为 PS1="***** \w *** <\u@\h> ***** \! ***** \t ***\n\$ "
这个提示符, 我很喜欢, 应为他包含了我需要的足够信息如: 工作目录 用户名@机器名 命令编号 以及 时间, 但是他又不至于使 提示符 占用太长, 以至于没有多少空间留下来给 输入的命令, 注意看最后那个 \n 是个换行符, 故而 这是个 2行提示符, $ 独占一行, 留下足够的空间以便输入命令。

然而, 以上的提示符 不过 是我的“初稿”而已, 我还准备把它加上颜色, 使其更加醒目, 且 方便使用。 那么说到这里, 就不得不说一下终端的颜色使用了。(以下颜色是借鉴网上一篇文章而来)

颜色是通过在 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"  

此时我可以加工我以上的 “草稿了”, 将以下写入 .bashrc 或者 .bash_profile(两者有点差别, 主要在 登录shell 与 非登录shell方面, 我还会写一篇 登录shell 与 非登录shell的文章来 详细介绍如何设置这两个文件, 以求最优, 不过在这里 你可以随便写入那个文件)。
    # 先设置需要的颜色变量, 分别为 关闭颜色, 黑色, 红色, 绿色, 黄色, 蓝色,紫红色,青蓝色,白色。 注意这里没有写背景色, 你也可以如上 \e[32;40m 这样加入背景色, 来获取更加丰富的颜色方案, 但是这里我认为足够了。
     c_1="\[\e[0m%\]"
     c0="\[\e[30m%\]"
     c1="\[\e[31m%\]"
     c2="\[\e[32m%\]"
     c3="\[\e[33m%\]"
     c4="\[\e[34m%\]"
     c5="\[\e[35m%\]"
     c6="\[\e[36m%\]"
     c7="\[\e[37m%\]"
     PS1="$c0***** $c1\w $c2*** $c3<\u@\h> $c4***** $c5\! $c6***** $c7\t $c1***\n$c2\$ $c_1"; export PS1

这样一个漂亮的 提示符便展现在你的面前。
注意 最后的 $c_1 , 一定不要忘记, 这个是让终端恢复以前的颜色, 不然你所键入的命令, 显现的文件都将显示为最后 $c2 所定义的颜色。 还有, 细心的人定会发现颜色前后都被加上\[ \]这对符号,以其作用不外乎告诉终端, 这个是不占用终端的空间的, 开始终端编码而已,以便终端能够顺利换行等事情。

TCSH的设置。
    我们可以使用的标记列表有:
!      跟%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      时间的不同形式。
       .
       .
       .
太多了, 我们用到的也就几个而已,不知道的自己上网GOOGLE吧。

tcsh会读取 .login 和 .cshrc(或者.tcshrc), 登录shell两个文件都读取, 非登录shell只读取 .cshrc. 而提示符tcsh下使用的是 prompt 通常不设定为环境变量, 设为shell变量即可。 以下便是 上面PS1版本在TCSH下 prompt的设定。

set c_1 = "%{\e[0m%}"
set c0 = "%{\e[30m%}"
set c1 = "%{\e[31m%}"
set c2 = "%{\e[32m%}"
set c3 = "%{\e[33m%}"
set c4 = "%{\e[34m%}"
set c5 = "%{\e[35m%}"
set c6 = "%{\e[36m%}"
set c7 = "%{\e[37m%}"
set prompt = "$c1***** $c2%/ $c3*** $c4<%U`whoami`%u@%m> $c5*** $c6%h$c_1 $c7***** $c1%P $c2***\n$c3%%$c_1 "

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

[ 本帖最后由 longer0116 于 2008-11-13 20:55 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-06-16 11:54 |只看该作者
非常好的内容

论坛徽章:
0
6 [报告]
发表于 2009-06-16 13:00 |只看该作者
补充显示路径的设置
set prompt = "$cwd % "
alias cd 'cd \!* ; set prompt = "$cwd % " '

[ 本帖最后由 nopecj 于 2009-6-16 13:02 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP