别名fHrLinux联盟 fHrLinux联盟 还有一个使工作变得轻松的方法是使用命令别名。命令别名通常是其他命令的缩写,用来减少键盘输入。fHrLinux联盟 fHrLinux联盟 命令格式为:fHrLinux联盟 fHrLinux联盟 alias [alias-name=’original-command’]fHrLinux联盟 fHrLinux联盟 其中,alias-name是用户给命令取的别名,original-command是原来的命令和参数。需要注意的是,由于Bash是以空格或者回车来识别原来的命令的,所以如果不使用引号就可能导致Bash只截取第一个字,从而出现错误。如果alias命令后面不使用任何参数,则显示当前正在使用的被别名化的命令及其别名。为命令取的别名在该次登录期间始终有效。如果用户需要别名在每次登录时都有效,那么就将alias命令写到初始化脚本文件中。fHrLinux联盟 fHrLinux联盟 [例]如果经常要键入如下的命令,最好为它建立一个别名来减少工作量。fHrLinux联盟 fHrLinux联盟 $ cd /usr/X11/lib/X11fHrLinux联盟 fHrLinux联盟 假如为这个长命令建立一个名为goconfig的别名,在Bash提示符下键入如下命令:fHrLinux联盟 fHrLinux联盟 $ alias goconfig=’cd /usr/X11/lib/X11’fHrLinux联盟 fHrLinux联盟 现在,除非您退出Bash,键入goconfig将和原来的长命令有同样的作用。如果想取消别名,可以使用下面的命令:fHrLinux联盟 fHrLinux联盟 $ unalias goconfigfHrLinux联盟 fHrLinux联盟 这是一些很多人认为有用的别名,可以把它们写入初始化脚本文件中来提高工作效率:fHrLinux联盟 fHrLinux联盟 alias ll=’ls –l’fHrLinux联盟 fHrLinux联盟 alias log=’logout’fHrLinux联盟 fHrLinux联盟 alias ls=’ls –F’fHrLinux联盟 fHrLinux联盟 如果您是一名DOS用户并且习惯了DOS命令,可以用下面的别名定义使Linux表现得象DOS一样:fHrLinux联盟 fHrLinux联盟 alias dir=’ls’fHrLinux联盟 fHrLinux联盟 alias copy=’cp’fHrLinux联盟 fHrLinux联盟 alias rename=’mv’fHrLinux联盟 fHrLinux联盟 alias md=’mkdir’fHrLinux联盟 fHrLinux联盟 alias rd=’rmdir’fHrLinux联盟 fHrLinux联盟 注意:在定义别名时,等号两边不能有空格,否则shell不能决定您需要做什么。仅在命令中包含空格或特殊字符时才需要引号。fHrLinux联盟 fHrLinux联盟 如果键入不带任何参数的alias命令,将显示所有已定义的别名。fHrLinux联盟 fHrLinux联盟 提示符fHrLinux联盟 fHrLinux联盟 Bash有两级提示符。第一级提示符是经常见到的Bash在等待命令输入时的情况。第一级提示符的默认值是$符号。如果用户不喜欢这个符号,或者愿意自己定义提示符,只需修改PS1变量的值。例如将其改为:fHrLinux联盟 fHrLinux联盟 PS1=”Enter a command:”fHrLinux联盟 fHrLinux联盟 第二级提示符是当Bash为执行某条命令需要用户输入更多信息时显示的。第二级提示符默认为>。如果需要自己定义该提示符,只需改变PS2变量的值。例如将其改为:fHrLinux联盟 fHrLinux联盟 PS2=”More information:”fHrLinux联盟 fHrLinux联盟 上面的两个例子都是设定提示符为静态字符串的情况。其实用户也可以使用一些事先已经定义好的特殊字符。这些特殊字符将使提示符中包含当前时间之类的信息。表10-4列出了最常用的一些特殊字符及其含义。fHrLinux联盟 fHrLinux联盟 表10-4 bash提示符常用特殊字符fHrLinux联盟 fHrLinux联盟 fHrLinux联盟 fHrLinux联盟 特殊字符fHrLinux联盟 fHrLinux联盟 说 明fHrLinux联盟 fHrLinux联盟 !fHrLinux联盟 fHrLinux联盟 显示该命令的历史编号fHrLinux联盟 fHrLinux联盟 #fHrLinux联盟 fHrLinux联盟 显示shell激活后,当前命令的历史编号fHrLinux联盟 fHrLinux联盟 $fHrLinux联盟 fHrLinux联盟 显示一个$符号,如果当前用户是root则显示#符号fHrLinux联盟 fHrLinux联盟 \fHrLinux联盟 fHrLinux联盟 显示一个反斜杠fHrLinux联盟 fHrLinux联盟 dfHrLinux联盟 fHrLinux联盟 显示当前日期fHrLinux联盟 fHrLinux联盟 hfHrLinux联盟 fHrLinux联盟 显示运行该shell的计算机主机名fHrLinux联盟 fHrLinux联盟 nfHrLinux联盟 fHrLinux联盟 打印一个换行符,这将导致提示符跨行fHrLinux联盟 fHrLinux联盟 sfHrLinux联盟 fHrLinux联盟 显示正在运行的Shell的名称fHrLinux联盟 fHrLinux联盟 tfHrLinux联盟 fHrLinux联盟 显示当前时间fHrLinux联盟 fHrLinux联盟 ufHrLinux联盟 fHrLinux联盟 显示当前用户的用户名fHrLinux联盟 fHrLinux联盟 WfHrLinux联盟 fHrLinux联盟 显示当前工作目录基准名fHrLinux联盟 fHrLinux联盟 wfHrLinux联盟 fHrLinux联盟 显示当前工作目录fHrLinux联盟 fHrLinux联盟 fHrLinux联盟 fHrLinux联盟 这些特殊字符可以组合起来,为用户提供一些提示符,提供很有用的信息。下面来看几个实际例子:fHrLinux联盟 fHrLinux联盟 PS1=”t”fHrLinux联盟 fHrLinux联盟 将使提示符变成如下所示:fHrLinux联盟 fHrLinux联盟 02:16:15fHrLinux联盟 fHrLinux联盟 而 PS1=tfHrLinux联盟 fHrLinux联盟 将使提示符变成如下所示:fHrLinux联盟 fHrLinux联盟 tfHrLinux联盟 fHrLinux联盟 若PS1=”t\”fHrLinux联盟 fHrLinux联盟 将使提示符变成如下所示:fHrLinux联盟 fHrLinux联盟 02:16:30fHrLinux联盟 fHrLinux联盟 该例就是使用两个特殊字符的组合得到的。fHrLinux联盟 fHrLinux联盟 控制shell的运行方式fHrLinux联盟 fHrLinux联盟 Bash有一些特殊变量,能控制shell以不同的方式工作。例如,变量noclobber能防止在重定向输出时意外地覆盖一个文件。通过set命令可以设置noclobber变量的有效或无效。set命令有两个参数:一个是指定变量开(on)或关(off)的选项,一个是特殊变量的变量名。要使某一特殊变量开(有效),用-o选项,要使其关(无效),用+o选项。例如:fHrLinux联盟 fHrLinux联盟 $ set –o noclobber // 使noclobber变量开fHrLinux联盟 fHrLinux联盟 $ set +o noclobber // 使noclobber变量关fHrLinux联盟 fHrLinux联盟 三个最常用的shell特殊变量有:ignoreeof、noclobber及noglob。fHrLinux联盟 fHrLinux联盟 ignoreeoffHrLinux联盟 fHrLinux联盟 ignoreeof变量用来禁止使用ctrl+d来退出shell(ctrl+d不仅用来退出shell,而且可以终止用户直接输往标准输出上的输入。该操作经常在一些shell实用命令中使用,例如实用命令cat。在这些实用程序操作中,非常容易误操作而意外地退出shell。ignoreeof特殊变量正是用来防止这种意外的退出。例如:fHrLinux联盟 fHrLinux联盟 $ set –o ignoreeoffHrLinux联盟 fHrLinux联盟 之后,用户只能用logout或exit命令退出shell。fHrLinux联盟 fHrLinux联盟 noclobberfHrLinux联盟 fHrLinux联盟 noclobber变量可以在重定向输出时保护已存在的文件,防止被意外地覆盖。在下例中,用户设置noclobber为有效,在重定向时,用户试图去覆盖已经存在的文件myfile,此时系统将返回一个错误信息。fHrLinux联盟 fHrLinux联盟 [例]fHrLinux联盟 fHrLinux联盟 $ set –o noclobberfHrLinux联盟 fHrLinux联盟 $ cat preface>myfilefHrLinux联盟 fHrLinux联盟 bash: myfile: cannot overwrite existing filefHrLinux联盟 fHrLinux联盟 $fHrLinux联盟 fHrLinux联盟 noglobfHrLinux联盟 fHrLinux联盟 设置noglob变量后,shell将不扩展文件名中一些特殊的字符或字符串。如字符*、?、[ ]等将不再作为通配符。如果用户希望列出结尾为?的文件名answer?,可通过如下步骤:首先,用户使noglob变量为无效,然后再列出文件名。可以看到,目前命令行上的问号?被认为是文件名中的一个字符,而不再被看作通配符。fHrLinux联盟 fHrLinux联盟 $ set –o noglobfHrLinux联盟 fHrLinux联盟 $ ls answer?fHrLinux联盟 fHrLinux联盟 answer?fHrLinux联盟 fHrLinux联盟 子shell与export命令fHrLinux联盟 fHrLinux联盟 用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来说,用户可以有许多shell,每个shell都是由某个shell(称为父shell)派生的。fHrLinux联盟 fHrLinux联盟 在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。fHrLinux联盟 fHrLinux联盟 [例]在本例中,变量myfile是在dispfile脚本程序中定义的。然后用export命令将变量myfile输出至任何子shell,例如当执行printfile脚本程序时产生的子shell。fHrLinux联盟 fHrLinux联盟 dispfile脚本程序清单:fHrLinux联盟 fHrLinux联盟 /**************begin dispfile**************/fHrLinux联盟 fHrLinux联盟 myfile=”List”fHrLinux联盟 fHrLinux联盟 export myfilefHrLinux联盟 fHrLinux联盟 echo “Displaying $myfile”fHrLinux联盟 fHrLinux联盟 pr –t –n $myfilefHrLinux联盟 fHrLinux联盟 printfilefHrLinux联盟 fHrLinux联盟 /**************end dispfile***************/fHrLinux联盟 fHrLinux联盟 fHrLinux联盟 fHrLinux联盟 printfile脚本程序清单:fHrLinux联盟 fHrLinux联盟 /**************begin printfile**************/fHrLinux联盟 fHrLinux联盟 echo “Printing $myfile”fHrLinux联盟 fHrLinux联盟 lpr $myfile&fHrLinux联盟 fHrLinux联盟 /**************end printfile**************/fHrLinux联盟 fHrLinux联盟 $dispfilefHrLinux联盟 fHrLinux联盟 Displaying ListfHrLinux联盟 fHrLinux联盟 1 screenfHrLinux联盟 fHrLinux联盟 2 modemfHrLinux联盟 fHrLinux联盟 3 paperfHrLinux联盟 fHrLinux联盟 Printing ListfHrLinux联盟 fHrLinux联盟 $fHrLinux联盟 fHrLinux联盟 定制BashfHrLinux联盟 fHrLinux联盟 在本节中已经介绍了很多定制Bash的方法,但是迄今为止,这些方法都只是对当前Bash对话有用。只要用户退出登录,所做的一切改变都会丢失。所以应该在Bash的初始化文件中做永久性的修改。fHrLinux联盟 fHrLinux联盟 用户可以将每次启动Bash所需要执行的命令放入初始化文件中,最常见的命令就是alias命令和变量定义两种。系统中的每个用户在其主目录中都有一个.bash_profile文件,Bash每次启动时都将读取该文件,其中包含的所有命令都将被执行。fHrLinux联盟 fHrLinux联盟 下面便是默认.bash_profile文件的代码:fHrLinux联盟 fHrLinux联盟 #.bash_profilefHrLinux联盟 fHrLinux联盟 #Get the aliases and functionsfHrLinux联盟 fHrLinux联盟 if [-f ~/.bashrc ];thenfHrLinux联盟 fHrLinux联盟 .~/.bashrcfHrLinux联盟 fHrLinux联盟 fifHrLinux联盟 fHrLinux联盟 #User specific environment and startup programsfHrLinux联盟 fHrLinux联盟 PATH=$PATH:$HOME/binfHrLinux联盟 fHrLinux联盟 ENV=$HOME/.bashrcfHrLinux联盟 fHrLinux联盟 USERNAME=””fHrLinux联盟 fHrLinux联盟 Export USERNAME ENV PATH
|