我正在编写一个 bash 脚本,该脚本不断循环读取文件夹,以按定义的时间间隔将数据发送到服务器。我使用 netcat 作为连接到服务器并发送数据的工具。我的伪代码如下所示:
while true
do
read_folder()
process_data() > result.txt
cat result.txt > netcat ip port
wait 10 sec
done
我唯一的问题是,在这种情况下,客户端每次都会连接和断开与服务器的 TCP/IP 连接。我更愿意在脚本开始时建立连接并在结束时关闭它。
有什么方法可以使用 bash 脚本中的命令行工具来完成此操作吗?
答案1
只需将重定向放在循环之外即可。
while true; do
read_folder
process_data
sleep 10
done | netcat $ip $port
如果需要从循环内部输出到循环的标准输出,请通过另一个文件描述符将其转移。
{
while true; do
read_folder
echo tick >&3
process_data
sleep 10
done | netcat $ip $port
} 3>&1
答案2
两个独立的进程:一个将 result.txt 复制到 netcat。 Result.txt 通过另一个进程提供。
echo -n >result.txt
tail -f result.txt | nc ip port &
while true
do
read_folder()
process_data() > result.txt
wait 10 sec
done