假设您运行以下命令:
ssh $host1 'while [ 1 ]; do sleep 1; echo "Hello from $HOSTNAME"; done' > /tmp/output ssh $host2 'while [ 1 ]; do sleep 1; echo "Hello from $HOSTNAME"; done' >> /tmp/output ssh $host3 'while [ 1 ]; do sleep 1; echo "Hello from $HOSTNAME"; done' >> /tmp/output
然后输出看起来像:
Hello from host1 Hello from host2 Hello from host3 Hello from host1 ...
但是,如果我将其更改为
,该怎么办?ssh $host1 'while [ 1 ]; do sleep 1; cat /some/large/file1.txt; done' > /tmp/output ssh $host2 'while [ 1 ]; do sleep 1; cat /some/large/file2.txt; done' >> /tmp/output ssh $host3 'while [ 1 ]; do sleep 1; cat /some/large/file3.txt; done' >> /tmp/output
这样每个主机的stdout都不适合单个缓冲区?请问数据 文件的完整性[1-3] .txt,而不是订单,在这种情况下是否保持?是 有可能某个其他文件的文件片段在中间滑动 像这样的其他文件?
[file1_fragment1] [file2_fragment1] [file1_fragment2] [file1_fragment3] [file3_fragment1] ...
答案 0 :(得分:2)
我想说发生这种情况的可能性几乎是100%;-)假设通过网络将cat
一个文件花费的时间很长。
数据将以与接收顺序大致相同的顺序写入本地系统上的/tmp/output
。在#1中断之前,shell不知道要保留来自ssh命令#2或#3的数据,此外,它不知道文件1的每次迭代结束的位置。