Shell 如何连接到可能的新文件

Shell 如何连接到可能的新文件,shell,sh,Shell,Sh,我正在制作一个脚本,它需要将另一个脚本的一些输出行tee到多个文件 这样做的目的是让听众成为可依附的听众 问题是,有些文件在启动时不知道,可以创建更多的文件来接收数据 例如: #使用yes而不是实际脚本 是| tee侦听器/*>>/dev/null& 触动听众/a tee将通过管道传输到文件夹中已存在的文件,但不会传输到a 我可以在每一行之后做一个while read循环来开始T,但这会使它慢得多 还有别的办法吗?甚至还有另一种设计?基于查尔斯·达菲的评论,我做了如下设计: rm-f管道和mk

我正在制作一个脚本,它需要将另一个脚本的一些输出行tee到多个文件
这样做的目的是让听众成为可依附的听众
问题是,有些文件在启动时不知道,可以创建更多的文件来接收数据

例如:

#使用yes而不是实际脚本
是| tee侦听器/*>>/dev/null&
触动听众/a
tee将通过管道传输到文件夹中已存在的文件,但不会传输到
a

我可以在每一行之后做一个while read循环来开始T,但这会使它慢得多

还有别的办法吗?甚至还有另一种设计?

基于查尔斯·达菲的评论,我做了如下设计:

rm-f管道和mkfifo管道
脚本>管道&
rm-f pid
inotifywait-m-e create-e delete侦听器/--格式“%f”\
|(在读取-r文件时;执行以下操作)
[-f pid]&&kill“$(cat pid)”
cat管道| T形侦听器/*>>/dev/null&
echo“$(作业-p)”>pid
完成)

它确实比while-read循环快,并且当您指定基线
sh
时,几乎不使用CPU,您的意思是说您需要仅使用POSIX指定工具的系统的可移植性吗?任何合理的实现都需要
inotifywait
或等效工具来使用操作系统的功能,在目录内容发生更改时提供通知(老实说,尝试在shell中实现这一点根本不是一个好主意)…无论如何,作为一个起点,如果我试图在Linux上的bash中实现这一点,我会让
inotifywait
向进程发送一个信号,该信号会触发一个标志(参见shell
trap
机制),告诉它重新打开它复制内容的
tee
副本(参见使用
exec
替换文件描述符,以及
(…)
对于进程替换),使用新评估的glob生成一个新实例。不过,老实说,如果我自己实现这个,我不会在shell中实现它。Go,Python,甚至C都是更好的选择。是的,我需要它是可移植的,
inotifywait
将是一个问题,因为我使用FreeBSD。。。如果没有更好的选择,也许我应该采用慢循环方式,但是由于项目的其余部分已经在shell脚本中,坦白地说,如果备选方案是每行运行一次
tee
,那么我也需要这个部分是shell,您最好在shell中以本机方式重新实现
tee
,这样就不会占用每一条消息的进程启动开销。shell读取输入的速度很慢(它一次读取一个字节,这样就不会消耗更多的流),但反复启动外部命令的速度要慢得多。