文件就地编辑,tee 在不同的 UNIX 上表现不同
一位同事正在 bash shell 脚本中试验文件截断:从二进制文件中提取前两个字节。
以下内容在 BSD/OS X 上运行良好(输出中为“12”),但在 Linux 上则不然(输出为空)
echo 1234 >test
head -c2 test | tee test >/dev/null
: tee 部分在子 shell 中运行
echo 1234 >test
(head -c2 test | tee test >/dev/null)
使其也可以在 Linux 上运行。
为什么?
(特别是对截断问题的解决方案不感兴趣,而是解释为什么不同风格的操作系统上的行为不同。)
A coworker was experimenting with file truncation in a bash shell script: extract two first bytes out of a binary file.
The following worked fine on BSD/OS X ("12" in output) but not on Linux (output was empty):
echo 1234 >test
head -c2 test | tee test >/dev/null
Changing the head | tee
part to run in a subshell
echo 1234 >test
(head -c2 test | tee test >/dev/null)
made it work on Linux as well.
Why?
(Specifically not interested in solutions to the truncating problem but an explanation why the behavior is different on different flavors of operating systems.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
tee
打开其参数进行写入,并在此过程中截断它们,但是head
或tee
首先打开文件是有机会的。任何一种行为都是有效的;您只是不应该依赖这个迷你脚本来做任何有用的事情。tee
opens its arguments for writing, truncating them in the process, but whetherhead
ortee
opens the file first is left to chance. Either behavior is valid; you just shouldn't rely on this mini-script doing anything useful.