探究GP系统运作,现将个人对GP系统中的各种Shell的理解解析如下,供参考!
所有说明都依 Topprod GP Server 正式区为例
说明:所有demo都依capt001为例
exe2:执行42r程序文件
#demo:exe2 capt001
<topprod:/u1/topprod/tiptop> cd $CAP/4gl
<topprod:/u1/topprod/topcust/cap/4gl> exe2 capt001
Execute program:capt001
INFO: TIPTOP GP System Exists 62 / 80 User(s) Online.
<topprod:/u1/topprod/topcust/cap/4gl> INFO: Your Plant (SSTL_DX) is setting in GMT+8 time zone.
INFO: 4st for Interface Level = /u1/topprod/tiptop/config/4st/tiptop.4st
INFO: 4ad for Interface Level = /u1/topprod/tiptop/config/4ad/0/tiptop.4ad
INFO: 4ad for Form Level = /u1/topprod/topcust/config/4ad/0/cap/capt001.4ad
INFO: 4tm for Interface Level = /u1/topprod/tiptop/config/4tm/topmenu_t.4tm
INFO: 4tb for Interface Level = /u1/topprod/tiptop/config/4tb/toolbar_t.4tb
g_ui_setting : std
INFO: Locale feature use 0.06674 seconds.
A、exe2 路径
$DS4GL/bin/exe2
B、exe2 Shell解析
######
# Run application whatever where you are
######
# Prompt how to work
if [ "$1" = "" ] ; then
#如果用户光秃秃的exe2即该shell后面没有其他任何位置参数,则提示如下信息,并退出Shell
echo "Usage: exe2 prog_name\n"
exit 1
fi
PW=`pwd`
#将pwd结果即当前路径值赋给PW变量
# Change to temporary directory, and run the application
#FGLLDPATH=$AWS/42m:$ABG/42m:$ADM/42m:$ROS/42m:$APS/42m:$AMM/42m:$ATY/42m:$ACO/42m:$APJ/42m:$ARM/42m:$AQC/42m:$AFA/42m:$AZZ/42m:$AOO/42m:$GPY/42m:$APY/42m:$ABX/42m:$AXS/42m:$ASD/42m:$AXC/42m:$GXM/42m:$AXM/42m:$GIS/42m:$GXR/42m:$AXR/42m:$AMD/42m:$GAP/42m:$AAP/42m:$GNM/42m:$ANM/42m:$GGL/42m:$AGL/42m:$ASM/42m:$CSF/42m:$ASF/42m:$AMR/42m:$AMS/42m:$CPM/42m:$APM/42m:$ACS/42m:$AEC/42m:$AIM/42m:$ABM/42m:$QRY/42m:$SUB/42m:$LIB/42m:$FGLDIR/lib:$FGLLDPATH;export FGLLDPATH
#FGLLDPATH=../42m:$AZZ/42m:$LIB/42m:$SUB/42m:$QRY/42m:$FGLLDPATH;export FGLLDPATH
FGLRUN=${FGLRUN:=fglrun};export FGLRUN #BUG-4C0168
cd $TEMPDIR
echo '\033[?7h\c'
#-- BUG-570157 ----------------------------------------------------------------
#一下while循环p_go执行exe2后面传进来的4GL程序名称
i=1
cmd="$FGLRUN $AZZ/42r/p_go.42r"
while [ $i -le $# ]
do
eval arg=\${$i}
cmd="${cmd} '${arg}'"
#循环组字符串$FGLRUN $AZZ/42r/p_go.42r ${arg}
i=`expr $i + 1`
#expr 用于整数+ - * / 运算
done
eval $cmd
#执行组好的字符串
echo '\033[?7l\c'
cd $PW
注意:鼎新公司没有给$AZZ/42r/p_go此程序的原代码哟!
——————– over, exe2执行42r程序文件Shell指令完毕!——————————–
r.r2:执行42r程序文件
#demo:r.r2 capt001
<topprod:/u1/topprod/topcust/cap/4gl> r.r2 capt001
INFO: Your Plant (SSTL_DX) is setting in GMT+8 time zone.
INFO: 4st for Interface Level = /u1/topprod/tiptop/config/4st/tiptop.4st
INFO: 4ad for Interface Level = /u1/topprod/tiptop/config/4ad/0/tiptop.4ad
INFO: 4ad for Form Level = /u1/topprod/topcust/config/4ad/0/cap/capt001.4ad
INFO: 4tm for Interface Level = /u1/topprod/tiptop/config/4tm/topmenu_t.4tm
INFO: 4tb for Interface Level = /u1/topprod/tiptop/config/4tb/toolbar_t.4tb
g_ui_setting : std
INFO: Locale feature use 0.06261 seconds.
A、r.r2 路径
$DS4GL/bin/r.r2
B、r.r2 Shell解析
r.r2与exe2原理完全相同,这里只列示原代码,不再做代码说明了
######
# Running application
######
# Prompt how to work
if [ "$1" = "" ] ; then
echo "Usage: r.r2 prog_name\n"
exit 1
# If has no correspond execute binary
elif [ ! -s ../42r/${1}.42r ] ; then
echo "\033[7m${1}\033[m error happens, check if:"
echo " 1) Do you specify the right program name ?"
echo " 2) File size is zero ?\n"
exit 1
fi
PW=`pwd`
# Change to temporary directory, and run the application
FGLLDPATH=`echo $PW`/../42m:$FGLLDPATH;export FGLLDPATH
#如果一个路径变量中要包含多个路径 Unix/Linux依:分隔 Windows依,分隔
FGLRUN=${FGLRUN:=fglrun};export FGLRUN #BUG-4C0168
cd $TEMPDIR
#-- BUG-570157 ----------------------------------------------------------------
i=2
#No:FUN-810089 不走自动判断的行业别架构
cmd="$FGLRUN $PW/../42r/${1}.42r"
#cmd="$FGLRUN $DS4GL/bin/industry_run.42r 'r.r2' $PW ${1}" #No:FUN-7B0080 回复行业别架构
while [ $i -le $# ]
do
eval arg=\${$i}
cmd="${cmd} '${arg}'"
i=`expr $i + 1`
done
eval $cmd
cd $PW
——————– over, r.r2执行42r程序文件Shell指令完毕!————————–
r.d2+:debug模式执行42r文件
#demo:用fgldeb dubug fgldeb
<topprod:/u1/topprod/tiptop/ds4gl2/fgldeb> fglrun fgldeb /u1/topprod/tiptop/ds4gl2/fgldeb/fgldeb
program is "/u1/topprod/tiptop/ds4gl2/fgldeb/fgldeb", args are ""
program is: "fglrun -d /u1/topprod/tiptop/ds4gl2/fgldeb/fgldeb 2>&1", status is: 0
A、r.d2+ 路径
/u1/topprod/tiptop/ds4gl2/bin
B、r.d2+ Shell解析
######
# Debug
######
# Prompt how to work
if [ "$1" = "" ] ; then
echo "Usage: r.d2+ prog_name\n"
exit 1
# If has no correspond execute binary
elif [ ! -s ../42r/${1}.42r ] ; then
echo "\033[7m${1}\033[m error happens, check if:"
echo " 1) Do you specify the right program name ?"
echo " 2) File size is zero ?\n"
exit 1
fi
PW=`pwd`
# Setting source file path, and run the application in debug mode
FGLLDPATH=$DS4GL/fgldeb:$FGLDIR/lib:../42m:$FGLLDPATH;export FGLLDPATH #BUG-4C0168
DBPATH=$DBPATH:$DS4GL/fgldeb;export DBPATH #BUG-4C0168
FGLSOURCEPATH=../42m:$LIB/42m:$QRY/42m:$SUB/42m;export FGLSOURCEPATH #BUG-4C0168
FGLRUN=${FGLRUN:=fglrun};export FGLRUN #BUG-4C0168
cd $TEMPDIR
#-- BUG-570157 ----------------------------------------------------------------
i=2
#No:FUN-810089 不走自动判断的行业别架构
cmd="$FGLRUN $DS4GL/fgldeb/fgldeb $PW/../42r/${1}.42r"
#执行$DS4GL/fgldeb/路径下的fgldeb 4GL程序
#上行代码意思就是如果debug capt001程序,你可以这样执行:在$DS4GL/fgldeb/路径下fglrun fgldeb /u1/topprod/topcust/cap/42r/capt001.42r
#cmd="$FGLRUN $DS4GL/bin/industry_run.42r 'r.d2+' $PW ${1}" #No:FUN-7B0080 回复行业别架构
while [ $i -le $# ]
do
eval arg=\${$i}
cmd="${cmd} '${arg}'"
i=`expr $i + 1`
done
eval $cmd
cd $PW
备注:请自行查看$DS4GL/fgldeb/fgldeb 被调用的该4gl程序源代码
———- over, r.d2+ debug模式执行42r程序文件Shell指令完毕!———————————-
udm7:呼叫udm7 Shell开启Tiptop GP主画面
#demo:udm7
<topprod:/u1/topprod/tiptop/ds4gl2/bin> cd $TOP
<topprod:/u1/topprod/tiptop> udm7
INFO: Your Plant (SSTL_FT) is setting in GMT+8 time zone.
clas=CLASS-A prog=aoos901
INFO: 4st for Interface Level = /u1/topprod/tiptop/config/4st/tiptop.4st
INFO: 4ad for Interface Level = /u1/topprod/tiptop/config/4ad/0/tiptop.4ad
INFO: 4tm for Interface Level = /u1/topprod/tiptop/config/4tm/topmenu_s.4tm
INFO: 4tb for Interface Level = /u1/topprod/tiptop/config/4tb/toolbar_s.4tb
g_ui_setting : std
INFO: Locale feature use 0.03721 seconds.
A、udm7路径
/u1/topprod/tiptop/ds4gl2/bin
B、udm7 Shell解析
####################
# Modify: 2005/04/26 BUG-540177 by Brendan: Fix BIG5/GB2312 switch issue under direct connection(telnet)
# Modify: 2005/09/02 MOD-590031 by Brendan: Infinite loop when manualy terminate process by GDC
# Modify: 2006/04/25 TQC-640179 by Brendan: 加入 GBK/GB2312 语系判断 for 简/繁转码机制
# Modify: 2006/06/20 FUN-620044 by Alexstar:加入 切换FGLASIP参数的功能(外部联机到TIPTOP主机时使用)
# Modify: 2006/12/13 MOD-6C0058 by Alexstar:FUN-690056 的修改方式会造成客户使用web登入时无法正常切换语言
# Modify: 2007/11/05 FUN-7A0086 by saki:避免aoos901按cancel离开时,会残留process
# Modify: 2007/12/10 FUN-7B0109 by Brendan: 简繁转码功能调整
# Modify: 2008/01/30 FUN-810084 by Alexstar:User满时,若是非透过Web联机,则POP窗口通知
# Modify: 2008/01/19 CHI-910047 by Alexstar:如果有客制aoos901的情况,会无法读到客制区的42r檔
# Modify: 2009/02/04 TQC-920003 by Alexstar:exe2会导致no wait,udm_tree在选完工场别之前就已执行
# Modify: 2009/08/05 TQC-980040 by Dido 调整时区执行问题
# Modify: 2009/08/20 TQC-980150 by alex 调整TQC-980040只给unicode使用
# Modify: 2009/10/27 TQC-9A0142 by Dido 取消 udm_tree 使用 p_go 执行
####################
cd $TEMPDIR
#跳到GP临时目录/u1/out下
if [ "$FGLGUI" = "1" ]
#如果FGLGUI=1,GP默认设置$FGLGUI=1,表示图像模式执行程序
then
DBPATH=/u3/genero/topi_7eng:$DBPATH;export DBPATH
FGLRUN=${FGLRUN:=fglrun};export FGLRUN
cd $TEMPDIR
echo '\033[?7h\c'
#FUN-620044---start---
#此段处理web登录后建立一全局变量WEBUSER保存当前user的用户ID
if [ $# -eq 3 ] ; then
#如果udm7 Shell位置参数为3个时
if [ $1 = "weblog" ] ; then
#且第一个位置参数值为weblog
WEBUSER=$2;export WEBUSER
#建立一全局变量WEBUSER保存当前user的用户ID
fi
fi
#FUN-620044---end---
if [ "$1" != "weblog" ] ; then #FUN-810084
#User满时,若是非透过Web联机,则POP窗口通知
user_chk || exit
#执行$TOP/bin/路径下的user_chk Shell脚本检查User联机是否已满
fi
$FGLRUN $AOO/42r/aoos901.42r #CHI-910047 mark #TQC-920003 unmark
#执行aoos901选择工厂别
#exe2 aoos901 #CHI-910047 #TQC-920003 mark
if [ $? -ne 0 ] ; then
#如果执行aoos901不出错或是放弃执行aoos901则
#No:FUN-7A0086 --start--
if [ $# -eq 3 ] ; then
#如果udm7的位置参数有3个即从weblog中RUN udm7时
touch $3
#则删除位置参数$3表示的进程.weblog中udm7的第3个参数是保留上一个进程的PID
fi
#No:FUN-7A0086 ---end---
exit
fi
# $FGLRUN $AZZ/42r/p_go.42r udm_tree $2
#--- BUG-540177
#MOD-6C0058---start---
if [ $# -ne 3 -a $1!="weblog" ] ; then
#如果udm7的位置参数个数不等于3且第一个位置参数$1不等于weblog
UDM7=Y;export UDM7
#则新建全局变量UDM7,值为Y。表示Xshell执行的udm7
fi
#MOD-6C0058---end---
# UDM7=Y;export UDM7 #MOD-6C0058--mark
LOCALE=`echo $LANG | cut -d. -f1 | tr \[a-z\] \[A-Z\]`
#将GP当前语言别取出来并将小写字符全部编程大写字符结果为EN_US
#--- BUG-560170
CHARMAP=`locale charmap | cut -d. -f1 | tr \[a-z\] \[A-Z\] | tr -d "'"'"'`
#查看默认编码方式
#locale charmap的结果"utf8.cm"复位向给cut,cut依逗点分隔取第一部份将结果"utf8复位向给tr,tr将小写字符全部变为大写字符且删除当前行结果中的'符号
#即处理出来的结果就是CHARMAP=UTF8
#----------
dvm_version=`fpi | grep -i "version" | awk '{ print $NF }'` #FUN-7B0109
#4GL中的fpi指令查看DVM版本信息
#fpi的结果复位向给grep,grep -i忽略大小写查找字符version所在的字段将结果Version 2.11.16复位向给awk,awk打印最后一个字段,结果为2.11.16
EXIT=-1
#变量EXIT的值初始为-1,表示各种退出状态
until [ $EXIT -eq 0 -o $EXIT -eq 1 ] #MOD-590031
#循环执行直到EXIT的值为0即正常退出或是为1错误退出为止
do
RUN=`echo $FGLRUN | cut -d' ' -f1`
#echo $FGLRUN的结果fglrun复位向给cut,cut依' '分隔取第一部份,结果fglrun
#下面处理:如果GP中设定的字符编码是中文类则fglrun时需要转码,UTF8等其它标准的国际通用的英文编码则不需要转码
if [ "$CHARMAP" = "BIG5" -o "$CHARMAP" = "GB2312" -o "$CHARMAP" = "GBK" -o "$CHARMAP" = "GB18030" ] ; then #TQC-640179
#如果字符编码是BIG5或GB2312或GBK或GB18030即中文字符编码类别 则
if [ "$LOCALE" = "ZH_TW" -a $EXIT -eq 12 ] ; then
#如果当前语言别是ZH_TW中国_台湾并且EXIT值=12 则
#-- No:FUN-7B0109 BEGIN ---------------------------------------------
if [[ "$dvm_version" < "2.02.06" ]] ; then
#如果DVM版本信息小于2.02.06 则
RUN="$RUN -t gb2312"
#将RUN赋值为fglrun -t gb2312
else
RUN="$RUN -t gbk"
#如果DVM版本信息小于2.02.06,则将RUN赋值为fglrun -t gbk
fi
#-- No:FUN-7B0109 BEGIN ---------------------------------------------
fi
if [ "$LOCALE" = "ZH_CN" -a $EXIT -eq 10 ] ; then
#如果当前语言别是ZH_CN中国_大陆并且EXIT值=10 则
RUN="$RUN -t big5"
#将RUN赋值为fglrun -t big5
fi
fi
#FUN-620044---start---
if [ $# -eq 3 ] ; then
#如果udm7的位置参数是3个时 则
if [ $1 = "weblog" ] ; then
#如果udm7的位置参数$1值=weblog时 则
if [ $EXIT -eq 20 -o $EXIT -eq 21 ] ; then
#如果变量EXIT的值=20或是EXIT的值=21 则
FGLASIP=`head -1 $TEMPDIR/$2.userip.tmp`;export FGLASIP
#将文件$TEMPDIR/$2.userip.tmp的头几行值赋给FGLASIP
echo $FGLASIP
fi
#-TQC-9A0142-add-
#if [ "$CHARMAP" = "BIG5" -o "$CHARMAP" = "GB2312" -o "$CHARMAP" = "GBK" -o "$CHARMAP" = "GB18030" ] ; then #TQC-980040 #TQC-980150
$RUN $AZZ/42r/udm_tree '' $3
#执行AZZ模块下的udm_tree 目录程序
#且udm_tree的2个参数分别为''和$3,$3是上一个进程的PID,即启动udm7 Shell的程序的进程PID
#else
# $RUN $AZZ/42r/p_go udm_tree '' $3
# EXIT=$?
#fi
#-TQC-9A0142-end-
fi
else
#如果udm7的位置参数不是3个时 则
#-TQC-9A0142-add-
#if [ "$CHARMAP" = "BIG5" -o "$CHARMAP" = "GB2312" -o "$CHARMAP" = "GBK" -o "$CHARMAP" = "GB18030" ] ; then #TQC-980040 #TQC-980150
$RUN $AZZ/42r/udm_tree
#直接udm_tree 不带任何参数
#else
# $RUN $AZZ/42r/p_go udm_tree
#fi
#-TQC-9A0142-end-
fi
#FUN-620044---end---
#$RUN $AZZ/42r/udm_tree #FUN-620044 mark
EXIT=$?
#将上一条Shell命令的执行状态值赋给变量EXIT
done
if test -e $TEMPDIR/$2.userip.tmp #FUN-620044
#判断$TEMPDIR/$2.userip.tmp文件是否存在,如果存在则删除
then
rm $TEMPDIR/$2.userip.tmp
fi
#----------
echo '\033[?7l\c'
else
#其他4GL不支持的英文字符编码和非指定判别的中文字符编码则提示如下信息
echo "udm7 is for GDC only, ASCII mode does not supported yet!"
fi
——————– over, udm7开启GP主画面Shell指令完毕!
与程序执行有关的指令exe2 r.r2 r.d2+ udm7就介绍到这里!
转载请注明:赫非域 » Tiptop GP命令exe2 r.r2 r.d2+ udm7解析