0

假设您运行以下命令:

ssh $host1 '而 [ 1 ]; 睡一觉;echo "来自 $HOSTNAME 的你好"; 完成' > /tmp/输出
ssh $host2 '而 [ 1 ]; 睡一觉;echo "来自 $HOSTNAME 的你好"; 完成' >> /tmp/输出
ssh $host3 'while [ 1 ]; 睡一觉;echo "来自 $HOSTNAME 的你好"; 完成' >> /tmp/输出

然后输出将如下所示:

来自host1的你好
来自host2的你好
来自host3的你好
来自host1的你好
...

但是如果我把它改成

ssh $host1 '而 [ 1 ]; 睡一觉;猫 /some/large/file1.txt; 完成' > /tmp/输出
ssh $host2 '而 [ 1 ]; 睡一觉;猫 /some/large/file2.txt; 完成' >> /tmp/输出
ssh $host3 'while [ 1 ]; 睡一觉;猫 /some/large/file3.txt; 完成' >> /tmp/输出

以便每个主机的标准输出不适合单个缓冲区?在这种情况下是否会维护 file[1-3].txt 的数据完整性,而不是顺序?是否有可能其他文件的文件片段像这样在其他文件的中间滑动?

[file1_fragment1] [file2_fragment1] [file1_fragment2] [file1_fragment3] [file3_fragment1] ...
4

1 回答 1

2

我想说发生这种情况的可能性几乎是 100% ;-) 假设cat通过网络处理一个文件所花费的时间很长。

数据将按照与接收数据大致相同的顺序写入/tmp/output本地系统。shell 不知道要保留来自 ssh 命令 #2 或 #3 的数据,直到 #1 出现中断,此外,它也不知道文件 1 的每次迭代的结束点在哪里。

于 2010-08-10T00:00:59.043 回答