本文介绍了在处理长期XMLStarlet列表编辑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
XMLStarlet的版本有128业务的限制每 xmlstarlet版
调用和所有的版本由操作系统的限制系统的最大命令行长度。这怎么能围绕工作?
Versions of XMLStarlet found in current Linux distributions have a limit of 128 operations per xmlstarlet ed
invocation, and all versions are limited by the operating system's maximum command-line length. How can this be worked around?
推荐答案
下面符长xmlstarlet编辑列表成更短的操作的流水线:
The following breaks long xmlstarlet edit lists into a pipeline of shorter operations:
xmlstarlet_max_commands=100 # max per instance; see http://sourceforge.net/tracker/?func=detail&aid=3488240&group_id=66612&atid=515106
xmlstarlet_ed() {
declare -a global_parameters
declare -a parameters
declare -i num_commands
declare -i cmd_len
global_parameters=( )
parameters=( )
num_commands=0
global_parameters_remaining=$1; shift
while (( global_parameters_remaining )); do
global_parameters+=( "$1" ); shift
(( global_parameters_remaining-- ))
done
while (( "$#" )) ; do
cmd_len=$1; shift
if ! [[ $cmd_len = +([0-9]) ]] ; then
echo "ERROR: xmlstarlet_ed commands must be prefixed by run length"
return 1
fi
if (( num_commands < xmlstarlet_max_commands )) ; then
parameters+=( "${@:1:$cmd_len}" )
num_commands+=1
shift $cmd_len
else
xmlstarlet ed "${#global_parameters[@]}" "${global_parameters[@]}" "${parameters[@]}" \
| xmlstarlet_ed "${#global_parameters[@]}" "${global_parameters[@]}" "$cmd_len" "$@"
return 0
fi
done
if (( ${#parameters[@]} > 0 )) ; then
xmlstarlet ed "${global_parameters[@]}" "${parameters[@]}"
else
cat
fi
}
它可以调用像这样:
It can be invoked as so:
# first list passed is global parameters; first the count, then the values
# pass only a 0 if no global parameters are desired
global_parameters=( 2 -N "xhtml=http://www.w3.org/1999/xhtml" )
# build up the parameter list as length/command pairs; the lengths are used
# to determine the potential split points between subprocesses
parameters=( )
while read; do
parameters+=( 8 -s /xhtml:html/xhtml:body -t elem -n line -v "$REPLY" )
done
# ...and actually invoke:
xmlstarlet_ed "${global_parameters[@]}" "${parameters[@]}" \
<<<"<html xmlns='http://www.w3.org/1999/xhtml'><body/></html>"
这篇关于在处理长期XMLStarlet列表编辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!