iva*_*off 1 linux svn bash shell concurrency
我想使用脚本一次更新大量SVN版本的项目.一个接一个地运行更新作业需要很长时间.
所以我试着并行运行这些工作.它似乎工作,但我不确定它是否正确完成.也许有没有我想到的并发问题?
请看一下脚本:
#!/bin/sh
time (
for f in `ls -d */`
do
(
OUTPUT=`svn update $f`
echo -e "= = = = = = = = = = $f \n$OUTPUT"
) &
done
wait
)
Run Code Online (Sandbox Code Playgroud)
当我不先存储输出时,它会全部混淆.
你觉得,这样可以吗?
注意:当没有很多要更新时,40个项目的加速度实际上是20左右.
如果两个作业同时完成,您的输出仍将混淆.您最好将输出写入文件,然后在运行结束时捕获文件:
#!/bin/sh
outdir="/tmp/output$$" # probably ought to be chosen with e.g. mktemp
trap 'rm -rf "$outdir"' EXIT # Clean up on exit, even if Ctrl-C
time (
mkdir "$outdir"
for f in `ls -d */` # You have issues with filenames with space in, here
do
(
echo -e "= = = = = = = = = = $f"
svn update "$f"
) > "$outdir/$f" &
done
wait
cat "$outdir"/*
)
Run Code Online (Sandbox Code Playgroud)
除此之外,我担心的是你并没有限制你明确运行的作业数量,但这在shell脚本中很难实现.如果您确信自己正在查看40个目录而不是10,000个目录,我认为这不是一个问题.