相关疑难解决方法(0)

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
查看次数

在 Linux 中的另一个进程打开的套接字中写入

在 Linux 上,一个进程是否可以在另一个打开的套接字中写入?

假设我使用 netcat 打开与 google.com 的连接:

myuser@linux:~$ nc google.com 80
Run Code Online (Sandbox Code Playgroud)

现在我可以查找进程 pid 并打开其文件描述符文件夹:

myuser@linux:~$ ls -la /proc/24105/fd
totale 0
dr-x------ 2 myuser myuser  0 2012-03-10 19:01 .
dr-xr-xr-x 7 myuser myuser  0 2012-03-10 19:01 ..
lrwx------ 1 myuser myuser 64 2012-03-10 19:02 0 -> /dev/pts/12
lrwx------ 1 myuser myuser 64 2012-03-10 19:02 1 -> /dev/pts/12
lrwx------ 1 myuser myuser 64 2012-03-10 19:01 2 -> /dev/pts/12
lrwx------ 1 myuser myuser 64 2012-03-10 19:02 3 -> socket:[3947162]
Run Code Online (Sandbox Code Playgroud)

所以现在我想使用该套接字内的回声发出 HTTP 请求: …

linux process io socket

10
推荐指数
2
解决办法
9894
查看次数

标签 统计

bash ×1

cat ×1

file-descriptors ×1

io ×1

less ×1

linux ×1

osx ×1

process ×1

socket ×1