交互式 shell 脚本 - 递归太深
Interactive shell script - Recursion too deep
我正在 KSH 中制作交互式 shell 脚本,但不断出现 'recursion too deep' 错误。它的发生没有明显的模式,除了我使用脚本的时间越长,它发生的可能性就越大。
我之前被告知这是因为我没有通过循环构建我的菜单系统,但我现在已经使用 'select' 完成了这个。这是我的菜单:
clear
echo "\nDatabase:${HBDB} ClaimId:${CLAIM} TxId:${TRANS} SubsidyId:${SUBS}"
echo "Select your option"
PS3="Option?"
select opt in \
"Input new subsidy row" \
"Change transaction and subsidy id" \
"Change subsidy id only" \
"Show subsidy row details" \
"Exit"
do
case $opt in
"Input new subsidy row")
followUp=$SUPPATH/menuSelect.sh
echo 'Dropping temp table...mcc_ac_tmp_hb9880_${CLAIM}_${TRANS}_${SUBS} ' >> $OUTFILE1
sql $HBDB <<_END_ | sed -n '/DROP/,$p' >> $OUTFILE1
set autocommit on;
\p\g
set lockmode session where readlock = nolock;
\p\g
DROP TABLE mcc_ac_tmp_hb9880_${CLAIM}_${TRANS}_${SUBS};
\p\g
_END_
. $paramSet
break
;;
"Change transaction and subsidy id")
followUp=$SUPPATH/menuSelect.sh
. $transChange
break
;;
"Change subsidy id only")
followUp=$SUPPATH/menuSelect.sh
. $subsChange
break
;;
"Show subsidy row details")
echo "Retrieving details..."
followUp=$SUPPATH/menu1.sh
sql $HBDB <<_END_ | grep '|'
set autocommit on;
\p\g
set lockmode session where readlock = nolock;
\p\g
select claim_id,rent_trans_id,rent_subsidy_id,from_date,pay_amt
from hbrentsubsidy
where claim_id=${CLAIM}
and rent_trans_id=${TRANS}
\p\g
_END_
read
break
;;
"Exit")
exit
;;
*)
echo "ERROR: Invalid selection"
;;
esac
done
. $followUp
每次选择一个选项时,都会调用一个函数,循环会中断,脚本会继续执行后续操作,例如选择另一个菜单 运行。
如果您想要整个脚本的更多内容,请告诉我
谢谢
问题解决了!看来我可以获取文件的次数确实有限制 - 我认为是文件操作员限制。我通过在开始时获取每个文件一次,将每个文件的内容放入一个函数,然后调用函数名称而不是重复获取文件来解决这个问题。
我正在 KSH 中制作交互式 shell 脚本,但不断出现 'recursion too deep' 错误。它的发生没有明显的模式,除了我使用脚本的时间越长,它发生的可能性就越大。
我之前被告知这是因为我没有通过循环构建我的菜单系统,但我现在已经使用 'select' 完成了这个。这是我的菜单:
clear
echo "\nDatabase:${HBDB} ClaimId:${CLAIM} TxId:${TRANS} SubsidyId:${SUBS}"
echo "Select your option"
PS3="Option?"
select opt in \
"Input new subsidy row" \
"Change transaction and subsidy id" \
"Change subsidy id only" \
"Show subsidy row details" \
"Exit"
do
case $opt in
"Input new subsidy row")
followUp=$SUPPATH/menuSelect.sh
echo 'Dropping temp table...mcc_ac_tmp_hb9880_${CLAIM}_${TRANS}_${SUBS} ' >> $OUTFILE1
sql $HBDB <<_END_ | sed -n '/DROP/,$p' >> $OUTFILE1
set autocommit on;
\p\g
set lockmode session where readlock = nolock;
\p\g
DROP TABLE mcc_ac_tmp_hb9880_${CLAIM}_${TRANS}_${SUBS};
\p\g
_END_
. $paramSet
break
;;
"Change transaction and subsidy id")
followUp=$SUPPATH/menuSelect.sh
. $transChange
break
;;
"Change subsidy id only")
followUp=$SUPPATH/menuSelect.sh
. $subsChange
break
;;
"Show subsidy row details")
echo "Retrieving details..."
followUp=$SUPPATH/menu1.sh
sql $HBDB <<_END_ | grep '|'
set autocommit on;
\p\g
set lockmode session where readlock = nolock;
\p\g
select claim_id,rent_trans_id,rent_subsidy_id,from_date,pay_amt
from hbrentsubsidy
where claim_id=${CLAIM}
and rent_trans_id=${TRANS}
\p\g
_END_
read
break
;;
"Exit")
exit
;;
*)
echo "ERROR: Invalid selection"
;;
esac
done
. $followUp
每次选择一个选项时,都会调用一个函数,循环会中断,脚本会继续执行后续操作,例如选择另一个菜单 运行。
如果您想要整个脚本的更多内容,请告诉我
谢谢
问题解决了!看来我可以获取文件的次数确实有限制 - 我认为是文件操作员限制。我通过在开始时获取每个文件一次,将每个文件的内容放入一个函数,然后调用函数名称而不是重复获取文件来解决这个问题。