通过过滤器命令编辑svn特性
我想对svn属性值递归地应用一个过滤器(例如通过过滤器命令编辑svn特性,svn,shell,Svn,Shell,我想对svn属性值递归地应用一个过滤器(例如sed-e's/OLD/NEW/g') 首先,在单个目标上,我可以执行以下操作之一: svn-propget--strict-PROPNAME目标| sed-e's/OLD/NEW/g'| svn-propset-PROPNAME--file=-TARGET svn-propset-PROPNAME--file=svn-propget-R的输出不容易解析,但是svn-propget-v-R的输出很难解析,所以我决定运行一次并解析其输出 首先,我尝试了进
sed-e's/OLD/NEW/g'
)
首先,在单个目标上,我可以执行以下操作之一:
svn-propget--strict-PROPNAME目标| sed-e's/OLD/NEW/g'| svn-propset-PROPNAME--file=-TARGET
svn-propset-PROPNAME--file=svn-propget-R
的输出不容易解析,但是svn-propget-v-R
的输出很难解析,所以我决定运行一次并解析其输出
首先,我尝试了进程替换>(…)
,但如中所述,我无法强制执行或等待这些子进程的终止,因此输出消息非常混乱,尽管它确实有效。如中所述,我使用了协过程:
#!/bin/bash
set -o errexit -o pipefail
if [ $# -le 2 ]; then
echo "usage: $0 PROPNAME TARGET COMMAND [ARGS...]" >&2
exit 1
fi
PROPNAME=$1; shift
TARGET=$1; shift
COMMAND=$1; shift
cleanup_and_wait() {
if [[ ${COPROC[1]} =~ ^[0-9]+$ ]]; then
eval "exec ${COPROC[1]}<&-"
wait $COPROC_PID
fi
}
unset curr_target
unset prev_line
while IFS= read -r line; do
case "$line" in
" "*)
line=${line:4}
if declare -p prev_line >/dev/null 2>&1; then
echo "$prev_line" >&${COPROC[1]}
fi
prev_line=$line
;;
" "*)
line=${line:2}
if [ "$line" != "$PROPNAME" ]; then
echo "Unexpected property: $line" >&2
fi
cleanup_and_wait
coproc { "$COMMAND" "$@" | svn propset "$PROPNAME" --file=- "$curr_target"; } >&2
unset prev_line
;;
"Properties on '"*"':")
line=${line%"':"}
line=${line#"Properties on '"}
curr_target=$line
;;
esac
done < <(svn propget --verbose --recursive "$PROPNAME" "$TARGET")
cleanup_and_wait
#/bin/bash
设置-o errexit-o pipefail
如果[$#-le 2];然后
echo“用法:$0 PROPNAME目标命令[ARGS…]”>&2
出口1
fi
PROPNAME=$1;转移
目标=1美元;转移
COMMAND=$1;转移
清理和等待(){
如果[${COPROC[1]}=~^[0-9]+$];则
eval“exec${COPROC[1]}svn propget-R
的输出不容易解析,但是svn propget-v-R的输出很难解析,所以我决定运行一次并解析其输出
首先,我尝试了进程替换(…)
,但如中所述,我无法强制执行或等待这些子进程的终止,因此输出消息非常混乱,尽管它确实有效。因此,如中所述,我使用了协进程:
#!/bin/bash
set -o errexit -o pipefail
if [ $# -le 2 ]; then
echo "usage: $0 PROPNAME TARGET COMMAND [ARGS...]" >&2
exit 1
fi
PROPNAME=$1; shift
TARGET=$1; shift
COMMAND=$1; shift
cleanup_and_wait() {
if [[ ${COPROC[1]} =~ ^[0-9]+$ ]]; then
eval "exec ${COPROC[1]}<&-"
wait $COPROC_PID
fi
}
unset curr_target
unset prev_line
while IFS= read -r line; do
case "$line" in
" "*)
line=${line:4}
if declare -p prev_line >/dev/null 2>&1; then
echo "$prev_line" >&${COPROC[1]}
fi
prev_line=$line
;;
" "*)
line=${line:2}
if [ "$line" != "$PROPNAME" ]; then
echo "Unexpected property: $line" >&2
fi
cleanup_and_wait
coproc { "$COMMAND" "$@" | svn propset "$PROPNAME" --file=- "$curr_target"; } >&2
unset prev_line
;;
"Properties on '"*"':")
line=${line%"':"}
line=${line#"Properties on '"}
curr_target=$line
;;
esac
done < <(svn propget --verbose --recursive "$PROPNAME" "$TARGET")
cleanup_and_wait
!/bin/bash
设置-o errexit-o pipefail
如果[$#-le 2];那么
echo“用法:$0 PROPNAME目标命令[ARGS…]”>&2
出口1
fi
PROPNAME=$1;移位
目标=1美元;班次
命令=$1;移位
清理和等待(){
如果[${COPROC[1]}=~^[0-9]+$];则
eval“exec${COPROC[1]}