关于根文件系统中命令行提示符的显示

时间:2010-01-27

  者:曹忠明,华清远见嵌入式学院讲师。

  我们经常用busybox生成根文件系统,可是根文件系统起来以后命令行提示符只有一个“#”号,没有像linux发行版那样是[user@hoSTnAME currentpath] #,那么我们这里就说说如何让我们的根文件系统按这个方式显示。

  要修改命令行提示符,首先我们需要知道一个环境变量PS1,我们可以查看bash的帮助文档查看关于PS1的说明:

  bash有两级命令提示符,我们这里说的是级,这缺省的提示符是字符“$”(超级用户是“#”),我们可以通过修改PS1修改这个提示符,格式为:

  PS1=”command list”

  命令列表有很多参数如下:

  \! 显示该命令的历史记录编号。

  \# 显示当前命令的命令编号。

  \$ 显示$符作为提示符,如果用户是root的话,则显示#号。

  \\ 显示反斜杠。

  \d 显示当前日期。

  \h 显示主机名。

  \n 打印新行。

  \nnn 显示nnn的八进制值。

  \s 显示当前运行的shell的名字。

  \t 显示当前时间。

  \u 显示当前用户的用户名。

  \W 显示当前工作目录的名字。

  \w 显示当前工作目录的路径

  我们查看我们发行版linux中的PS1.

  $echo echo $PS1

  [\u@\h \W] \$

  看了发行版是如何显示命令行提示符,那么我们再看一下为什么我们做的根文件系统只显示一个#,用busybox生成的根文件系统使用的是ash,我们看下busybox中关于ash的文件。

  在busybox-1.15.4/shell/ash.h中有这样的语句

  /*

  * PS1 depends on uid

  */

  #if ENABLE_FEATURE_EDITING && ENABLE_FEATURE_EDITING_FANCY_PROMPT

  vps1.text = "PS1=\\w \\$ ";

  #else

  if (!geteuid())

  vps1.text = "PS1=# ";

  #endif

  结合上面PS1参数我们可以看出在busybox生成的根文件系统中可能出现两种显示方式,一种是“currentpath $”另一种是 “#”这两种显示在较老的版本中都有。

  按照上面的方法修改我们的根文件系统中的命令行提示符。首先我们需要修改buxybox中配置,添加如下两个选项:

  Busybox Settings --->

  Busybox Library Tuning --->

  [*] Username completion

  [*] Fancy shell prompts

  如果不选择上面两项,文件系统是不是别PS1这个环境变量的参数的。

  创建/etc/hostname添加如下内容(我们的主机名):

  farsight

  修改/etc/init.d/rcS添加如下内容(导入主机名配置文件):

  /bin/hostname –F /etc/hostname

  修改根文件系统中/etc/profile文件添加如下内容:

  HOSTNAM=`/bin/hostname`

  PS1=`[\u@\h \W]\# `

  export PS1 HOSTNAME

  创建/etc/passwd添加如下内容:

  root:x:0:0:root:/root:/bin/sh

  这个时候我们重新启动我们的开发板会发现命令行提示符已经是我们想要的那种现实了:

  [root@farsight /etc] #

  “本文由华清远见https://www.embedu.org/index.htm提供”



  
上一篇:实例解析linux内核I2C体系结构(2)
下一篇:浅谈malloc与 kmalloc、cmalloc、realloc、new 的区别

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料