Tôi đang cố tạo kết nối liên tục bằng bash. Mở terminal 1, tôi giữ một netcat chạy như một máy chủ:Kết nối liên tục trong tập lệnh Bash
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
trên terminal 2, tôi tạo ra một fifo và giữ một con mèo:
$ mkfifo fifo
$ cat > fifo
trên thiết bị đầu cuối 3, tôi làm cho fifo như một đầu vào cho một netcat khách hàng:
$ cat fifo | nc -v localhost 3000
Connection to localhost 3000 port [tcp/*] succeeded!
Mở terminal 4, tôi gửi cho bất cứ điều gì tôi muốn:
$ echo command1 > fifo
$ echo command2 > fifo
$ echo command3 > fifo
Trở lại với terminal 1, tôi thấy các lệnh được nhận:
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
Connection from [127.0.0.1] port 3000 [tcp/*] accepted (family 2, sport 41722)
command1
command2
command3
Vì vậy, mọi thứ hoạt động. Nhưng khi tôi đưa rằng trong một kịch bản (tôi gọi fifo.sh đó), bash là không thể viết vào FIFO:
Mở terminal 1, cùng một máy chủ nghe:
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
Mở terminal 2, tôi chạy kịch bản:
#!/bin/bash
rm -f fifo
mkfifo fifo
cat > fifo &
pid1=$!
cat fifo | nc -v localhost 3000 &
pid2=$!
echo sending...
echo comando1 > fifo
echo comando2 > fifo
echo comando3 > fifo
kill -9 $pid1 $pid2
sản lượng trong terminal 2 là:
$ ./fifo.sh
Connection to localhost 3000 port [tcp/*] succeeded!
sending...
Mở terminal 1 tôi chỉ thấy connec sự. Không có lệnh:
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
Connection from [127.0.0.1] port 3000 [tcp/*] accepted (family 2, sport 42191)
Connection closed, listening again.
Bất kỳ ý tưởng nào về lý do tại sao nó chỉ hoạt động tương tác? Hoặc có cách nào khác để tạo kết nối liên tục chỉ sử dụng Bash không? Tôi không muốn đi cho mong đợi bởi vì tôi có một kịch bản Bash lớn hơn mà làm một số công việc sau khi gửi lệnh1, và command2 phụ thuộc vào đầu ra command1, vv
Cảm ơn bạn!
Xin chào và chào mừng bạn đến với Stack Overflow! Đây là câu hỏi mới bắt đầu tốt nhất mà tôi từng thấy. – l0b0