jon*_*rry 5 unix bash scripting
在bash函数中我写的是我通过ssh启动多个远程命令,并让它们在不同的后台进程中运行.这些过程中的每一个都会产生许多行文本,这些行被合并在一起然后进行排序.我的问题是有时这些线混合在一起.即一行开始打印,在该行完成打印之前,另一行开始在同一行上打印.
我的问题是什么是最简单的方法,使这个打印输出原子,以便各个线不混合在一起(穿插整条线是好的 - 我只是想让列排成一行)?我有一个想法是保存每个并行后台进程的输出,然后按顺序合并它们,但是我无法使它工作(如果我知道如何正确地执行它,这个方法对我来说应该很好).作为参考,这里是我正在尝试编写的脚本类型的概述:
foo() {
(
pids=()
for x in "$@"
do
(
ssh $x 'some-high-latency-command-with-200-lines-of-data-output'
) &
pids+=( $! )
done
for x in "${pids[@]}"
do
wait $x
done
) 2> /dev/null
}
Run Code Online (Sandbox Code Playgroud)
我会将每次ssh运行重定向到其自己的文件,然后将它们合并。我也不会使用wait循环;wait本身将等待所有后台进程,或者您可以说wait ${pids[*]}您是否真的只想要这些ssh进程。
| 归档时间: |
|
| 查看次数: |
643 次 |
| 最近记录: |