\u
显示当前用户的用户名
\W
显示当前工作目录基准名
\w
显示当前工作目录
这些特别字符能够组合起来,为用户提供一些提示符,提供很有用的信息。下面来看几个实际例子:
PS1=”\t”
将使提示符变成如下所示:
02:16:15
而 PS1=\t
将使提示符变成如下所示:
t
若PS1=”\t\\”
将使提示符变成如下所示:
02:16:30\
该例就是使用两个特别字符的组合得到的。
控制shell的运行方式
Bash有一些特别变量,能控制shell以不同的方式工作。例如,变量noclobber能防止在重定向输出时意外地覆盖一个文档。通过set命令能够配置noclobber变量的有效或无效。set命令有两个参数:一个是指定变量开(on)或关(off)的选项,一个是特别变量的变量名。要使某一特别变量开(有效),用-o选项,要使其关(无效),用 o选项。例如:
$ set –o noclobber // 使noclobber变量开
$ set o noclobber // 使noclobber变量关
三个最常用的shell特别变量有:ignoreeof、noclobber及noglob。
ignoreeof
ignoreeof变量用来禁止使用ctrl d来退出shell(ctrl d不但用来退出shell,而且能够终止用户直接输往标准输出上的输入。该操作经常在一些shell实用命令中使用,例如实用命令cat。在这些实用程式操作中,很容易误操作而意外地退出shell。ignoreeof特别变量正是用来防止这种意外的退出。例如:
$ set –o ignoreeof
之后,用户只能用logout或exit命令退出shell。
noclobber
noclobber变量能够在重定向输出时保护已存在的文档,防止被意外地覆盖。在下例中,用户配置noclobber为有效,在重定向时,用户试图去覆盖已存在的文档myfile,此时系统将返回一个错误信息。
[例]
$ set –o noclobber
$ cat preface>myfile
bash: myfile: cannot overwrite existing file
$
noglob
配置noglob变量后,shell将不扩展文档名中一些特别的字符或字符串。如字符*、?、[ ]等将不再作为通配符。假如用户希望列出结尾为?的文档名answer?,可通过如下步骤:首先,用户使noglob变量为无效,然后再列出文档名。能够看到,现在命令行上的问号?被认为是文档名中的一个字符,而不再被看作通配符。
$ set –o noglob
$ ls answer?
answer?
子shell和export命令
用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,能够使用shell命令或声明变量,也能够创建并运行shell脚本程式。运行shell脚本程式时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程式创建的shell。当一个脚本程式运行完毕,他的脚本shell将终止,能够返回到执行该脚本之前的shell。从这种意义上来说,用户能够有许多shell,每个shell都是由某个shell(称为父shell)派生的。
在子shell中定义的变量只在该子shell内有效。假如在一个shell脚本程式中定义了一个变量,当该脚本程式运行时,这个定义的变量只是该脚本程式内的一个局部变量,其他的shell不能引用他,要使某个变量的值能够在其他shell中被改变,能够使用export命令对已定义的变量进行输出。export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。
[例]在本例中,变量myfile是在dispfile脚本程式中定义的。然后用export命令将变量myfile输出至任何子shell,例如当执行printfile脚本程式时产生的子shell。
dispfile脚本程式清单:
/**************begin dispfile**************/
myfile=”List”
export myfile
echo “Displaying $myfile”
pr –t –n $myfile
printfile
/**************end dispfile***************/
printfile脚本程式清单:
/**************begin printfile**************/
echo “Printing $myfile”
lpr $myfile&
/**************end printfile**************/
$dispfile
Displaying List
1 screen
2 modem
3 paper
Printing List
$
定制Bash
在本节中已介绍了很多定制Bash的方法,但是迄今为止,这些方法都只是对当前Bash对话有用。只要用户退出登录,所做的一切改变都会丢失。所以应该在Bash的初始化文档中做永久性的修改。
用户能够将每次启动Bash所需要执行的命令放入初始化文档中,最常见的命令就是alias命令和变量定义两种。系统中的每个用户在其主目录中都有一个.bash_profile文档,Bash每次启动时都将读取该文档,其中包含的任何命令都将被执行。
下面便是默认.bash_profile文档的代码:
#.bash_profile
#Get the aliases and functions
if [-f ~/.bashrc ];then
.~/.bashrc
fi
#User specific environment and startup programs
PATH=$PATH:$HOME/bin
ENV=$HOME/.bashrc
USERNAME=””
Export USERNAME ENV PATH




