bash – OS X Lion中的I / O重定向

前端之家收集整理的这篇文章主要介绍了bash – OS X Lion中的I / O重定向前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个过去工作的脚本,它依赖于使用TCP将命令(实际上要处理的文件名)发送到侦听端口的进程.所以我可以把它发起并告诉它听,说端口9999.

作为一个快速黑客,我将使用如下命令设置流重定向到端口9999:

exec 3<> /dev/tcp/127.0.0.1/9999

然后我可以在我想要批处理所有文件的目录中运行一个find命令,比如

find . -name "*.xml" -exec printf "$PWD/{} $PWD/{}\r\n" >&3 \;

自从我升级到Lion以来,我没有尝试过这个,但它现在不起作用,给我一个“Bad File Descriptor”响应.有人有什么想法吗?

重定向到/ dev / tcp和/ dev / udp伪文件是Bash的可选编译时功能,许多操作系统供应商都选择将其关闭.看来苹果已经加入了俱乐部.你有几个选择:

>使用Bash的进程替换功能,例如:exec 3> >(nc localhost 9999)

如果您以交互方式执行此操作,则可能需要在不再需要重定向到TCP套接字时执行此操作:exec 3>的/ dev / null的

这应该导致生成的nc进程退出.>使用打开的/ dev / tcp和/ dev / udp伪文件支持编译自己的bash并使用它.>修改脚本以直接将输出管道输出到nc命令.如果您的脚本多次将输出重定向文件句柄3并且侦听过程未正确处理多个连接尝试,则可能会出现问题.但是,如果您发现自己需要在不提供Bash shell的系统上使用脚本,那么它也更具可移植性.

猜你在找的Bash相关文章