2011-03-04 42 views
3

一位同事在bash shell脚本中试验文件截断:从二进制文件中提取两个第一个字节。文件就地编辑,三通在不同的unix上表现不同

下面上BSD/OS X( “12” 在输出),但不是在Linux运行良好(输出是空的):

echo 1234 >test 
head -c2 test | tee test >/dev/null 

改变head | tee部分在子shell运行

echo 1234 >test 
(head -c2 test | tee test >/dev/null) 

也可以在Linux上使用。

为什么?

(具体不感兴趣的截断问题,但解释为什么行为是对操作系统的不同口味不同的解决方案。)

+0

一会儿,我虽然还在运行BSD/OS,并想知道X与它有什么关系:) – 2011-03-04 10:48:48

回答

1

tee打开它的参数写入,在这个过程中截断他们,但是否head或者tee首先打开文件留给机会。这两种行为都是有效的;你不应该依赖这个小脚本来做任何有用的事情。

+0

是的,就是这样。谢谢。特别是那些观察到这种情况的linux系统是SMP,而没有看到的是单核。 – laalto 2011-03-04 11:01:54