在我正在处理的 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 后代都受到影响?)
还是我做错了什么?