小编Sig*_*uza的帖子

OS X,bash:对打开的文件描述符的工作较少,cat 没有

在我正在处理的 bash 脚本(必须在 Ubuntu 和 OS X 上运行)中,我需要将数百个命令的输出重定向到一个文件。
而不是附加&>...到所有这些,我只是做

exec 9>&1
exec 5<>/tmp/some-file.txt
exec 1>&5
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,但在所有这些命令执行到一半时,我需要读取到目前为止已写入的所有内容,同时保持文件描述符处于打开状态。
现在,在 Ubuntu 上我可以简单地做

cat /dev/fd/5
Run Code Online (Sandbox Code Playgroud)

或者

tee </dev/fd/5
Run Code Online (Sandbox Code Playgroud)

但在 OS X 上,根本不打印任何内容(并且命令立即退出)。
但是,使用less我可以在两者上看到文件的内容。
我可以通过使用实现上述效果(在两个操作系统上都工作)

less /dev/fd/5 | tee
Run Code Online (Sandbox Code Playgroud)

但这似乎是一个黑客。

那么,为什么less显然可以看到catOS X上看不到的东西呢?(或者所有 BSD 后代都受到影响?)
还是我做错了什么?

osx less bash file-descriptors cat

11
推荐指数
1
解决办法
1417
查看次数

标签 统计

bash ×1

cat ×1

file-descriptors ×1

less ×1

osx ×1