2014-11-10 15 views
5

Tôi có một quy trình có thể được truyền thông qua một ổ cắm UNIX (thực tế là abstract socket mà tôi nghĩ là dành riêng cho Linux).Sử dụng mạng xã hội để kết nối với ổ cắm, gửi lệnh và đọc một dòng

Tôi đang viết tập lệnh trình bao cần gửi lệnh đến quy trình này. Tôi quyết định thử sử dụng SOCAT cho mục đích này. Tôi đang cố gắng tìm ra cách để (1) kết nối với socket trừu tượng, (2) gửi cho nó một lệnh duy nhất (một chuỗi), (3) đọc phản hồi và in đáp ứng cho stdout.

Cho đến nay, tôi có thể kết nối dễ dàng bằng cách đơn giản nói:

socat ABSTRACT-CONNECT:mysocket STDIN 

này kết nối STDIN để các ổ cắm, vì vậy nếu tôi biết bằng tay gõ một lệnh, ổ cắm sẽ đọc trong chuỗi, và sau đó sản lượng trả lời kết quả cho bàn điều khiển.

Trừ khi tôi chạy socat trong tập lệnh, tôi cần tự động gửi chuỗi tới STDIN. Được rồi, do đó, cách đơn giản nhất để làm điều này dường như chỉ là một chuỗi để STDIN. Vì vậy, giả sử chúng ta có một lệnh gọi là "status", tôi sẽ nói:

echo status | socat ABSTRACT-CONNECT:mysocket STDIN 

Điều này dường như làm việc (socat báo cáo không có lỗi), ngoại trừ kết quả không được gửi đến thiết bị xuất chuẩn. Thay vào đó, cuộc gọi chỉ đơn giản trả về mà không có phản hồi. Vậy làm thế nào tôi có thể đọc một dòng từ socket và hiển thị kết quả trên stdout?

Trả lời

2

sử dụng loại địa chỉ "STDIO" cho đối số thứ hai, đây là địa chỉ hai hướng. nó đọc dữ liệu đầu vào từ bàn điều khiển và gửi đến đầu đối diện, cũng như nhận dữ liệu từ đầu đối diện và ghi vào đầu ra của bàn điều khiển. tốt để đề cập đến - aka. dấu gạch ngang là phím tắt cho stdio.

+0

Và cách lưu biến này vào biến cục bộ trong tập lệnh shell? – 0andriy

Các vấn đề liên quan