文件就地编辑,tee 在不同的 UNIX 上表现不同

发布于 2024-10-20 07:00:06 字数 401 浏览 3 评论 0原文

一位同事正在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

桃酥萝莉 2024-10-27 07:00:06

tee 打开其参数进行写入,并在此过程中截断它们,但是 headtee 首先打开文件是有机会的。任何一种行为都是有效的;您只是不应该依赖这个迷你脚本来做任何有用的事情。

tee opens its arguments for writing, truncating them in the process, but whether head or tee opens the file first is left to chance. Either behavior is valid; you just shouldn't rely on this mini-script doing anything useful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文