分类: LINUX
2008-08-20 18:27:01
startx[[client]options.....][--[server]options....] xinit[[client]options][--[server][display]options]
#!/bin/sh userclientrc=$HOME/.xinitrc#用户的client定义文件 userserverrc=$HOME/.xserverrc#用户的server定义文件 sysclientrc=/usr/X11R6/lib/X11/xinit/xinitrc#系统的client sysserverrc=/usr/X11R6/lib/X11/xinit/xserverrc#系统的server defaultclient=/usr/X11R6/bin/xterm#默认的client程序 defaultserver=/usr/X11R6/bin/X#默认的server程序 defaultclientargs=""#下面定义了client和server的参数变量 defaultserverargs="" clientargs="" serverargs=""
if[-f$userclientrc];then defaultclientargs=$userclientrc elif[-f$sysclientrc];then defaultclientargs=$sysclientrc fi
#如果用户server文件存在则使用用户文件里定义的server,否则使用系统定义的server: if[-f$userserverrc];then defaultserverargs=$userserverrc elif[-f$sysserverrc];then defaultserverargs=$sysserverrc fi
whoseargs="client" while[x""!=x];do#若第一个参数为空,退出循环 case""in #''''requiredtopreventcppfromtreating"/*"asaCcomment. /''''*|./''''*)#如果是/*或者./*形式(xinit程序要求其参数里的client程序 和server程序必须以/或./开头,否则会被视为client程序和server程序的参数, 见manxinit) if["$whoseargs"="client"];then#如果当前是在处理client的参数 if[x"$clientargs"=x];then#如果clientargs为空, 则赋值给client变量,也即上面#startx使用方法里的[client]参数 client="" else clientargs="$clientargs"#否则clientargs赋值为$clientargs, 即上面#startx使用#方法里的options参数 fi else#当前在处理server的参数,代码的含义同上 if[x"$serverargs"=x];then server="" else serverargs="$serverargs" fi fi ;; --)#如果为--,则表示开始处理server的参数, --为client和server参数的分界 whoseargs="server" ;; *) if["$whoseargs"="client"];then #处理给client程序的参数 clientargs="$clientargs" else#处理给server程序的参数 #displaymustbetheFIRSTserverargument #屏幕编号必须为第一个给server程序的参数,以的形式(x为数字), 这可从上面startx和xinit的使用 #方法的区别看出,xinit多了个[display],这里即过滤出这个[display]。试试看这两个命令: #xinit/usr/bin/X11/xeyes-displaylocalhost:1--/usr/bin/X11/X:1-dpi70& #xinit/usr/bin/X11/xeyes-displaylocalhost:1--/usr/bin/X11/X-dpi70:1& #即可看出不把屏幕编号作为第一个server参数的后果 if[x"$serverargs"=x]&&expr"":'':[0-9][0-9]*$''>/dev/null2>&1;then display="" else#处理屏幕编号以外的参数 serverargs="$serverargs" fi fi ;; esac shift#所有参数左移一次 done #processclientarguments if[x"$client"=x];then#如果client程序为空 #ifnoclientargumentseither,usercfileinstead if[x"$clientargs"=x];then#且clientargs为空,赋值$defaultclientargs给client程序 client="$defaultclientargs" else client=$defaultclient#使用默认的client程序 fi fi #processserverarguments处理server参数,同上 if[x"$server"=x];then #ifnoserverargumentsordisplayeither,usercfileinstead if[x"$serverargs"=x-ax"$display"=x];then server="$defaultserverargs" else server=$defaultserver fi fi #…………省略授权代码若干 xinit$client$clientargs--$server$display$serverargs#把处理过的参数交 由xinit程序处理 #…………