Linux 程序执行后挂起--未完成
目前有一个shell程序,用于收集一些用于管理的一般系统信息 问题:在程序执行之后,它似乎挂起并且永远不会完成。在做了一些修补之后,我注意到它似乎在调用“DumpInfo”方法后挂起Linux 程序执行后挂起--未完成,linux,bash,shell,Linux,Bash,Shell,目前有一个shell程序,用于收集一些用于管理的一般系统信息 问题:在程序执行之后,它似乎挂起并且永远不会完成。在做了一些修补之后,我注意到它似乎在调用“DumpInfo”方法后挂起 # #说明: #收集一般系统信息,然后将信息放入转储文件中 # #用法: #bash getlocal.sh$TMPFILE 2>&1 它正在等待您在readarray上的输入。您可以使用bash-x getlocal.sh
#
#说明:
#收集一般系统信息,然后将信息放入转储文件中
#
#用法:
#bash getlocal.sh$TMPFILE 2>&1
它正在等待您在readarray
上的输入。您可以使用bash-x getlocal.sh
运行它,以获取调试跟踪日志(该日志将重定向到TMPFILE
)。如果这并没有使问题变得明显,那么编辑你的帖子并包含日志,顺便说一句,请参阅:关于函数的关键字。我强烈建议使用符合标准的XML库来生成XML。如果您想从bash中实现这一点,请将其视为一种易于解析和生成的格式,它可以直接转换为XML,也可以直接转换为XML。试图用printf
或其他工具生成XML,而这些工具实际上只是进行字符串连接,这充满了微妙的陷阱;同样地,运行$CMD
本身就有缺陷;请看。我建议删除这个问题,因为如果保留为知识库条目,它的解决方式似乎不太可能帮助其他人。
#
# Description:
# Gather general system info then place info in dumpfile
#
# Usage:
# bash getlocal.sh < cmds.txt, cmds.txt is a file with a list of commands to run
#
#
function SepCmds()
{
LCMD=${ALINE%%|*}
REST=${ALINE#*|}
WCMD=${REST%%|*}
REST=${REST#*|}
TAG=${REST%%|*}
if [[ $OSTYPE == "MSWin" ]]
then
CMD="$WCMD"
else
CMD="$LCMD"
fi
}
function DumpInfo ()
{
printf '<systeminfo host="%s" type="%s"' "$HOSTNAME" "$OSTYPE"
printf ' date="%s" time="%s">\n' "$(date '+%F')" "$(date '+%T')"
readarray CMDS
for ALINE in "${CMDS[@]}"
do
#ignore comments
if [[ ${ALINE:0:1} == '#' ]] ; then continue ; fi
SepCmds
if [[ ${CMD:0:3} == N/A ]]
then
continue
else
printf "<%s>\n" $TAG
$CMD
printf "</%s>\n" $TAG
fi
done
printf "</systeminfo>\n"
}
OSTYPE=$(./osdetect.sh)
HOSTNM=$(hostname)
TMPFILE="${HOSTNM}.info"
# gather the info into the tmp file; errors as well
DumpInfo > $TMPFILE 2>&1