我有一个过去工作的脚本,它依赖于使用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的系统上使用脚本,那么它也更具可移植性.