gửi lệnh đến một phiên màn hình đã chạy


11

Tôi đã cố gắng gửi các lệnh đến một phiên màn hình gnu đang chạy (4,00,03) trong opensolaris, nhưng không thể khiến nó chạy bất kỳ lệnh nào thông qua bất kỳ sự kết hợp nào của screen -X

Ok, tôi bắt đầu một phiên màn hình với screen -S test, và sau đó cố gắng screen -r -X "date"chỉ cho tôi biết ngày, khi tôi sẽ kết nối lại với nó. Nhưng không có thông báo lỗi cũng như đầu ra trong màn hình xảy ra. Tôi đã thử với rất nhiều kết hợp mà tôi thậm chí không thể nhớ được.

Bất kỳ gợi ý về làm thế nào để thực hiện nó?

Lý do tại sao tôi làm điều này là bởi vì tôi có một chương trình, không đến như một daemon, và tôi muốn bắt đầu nó trong một phiên màn hình, vì vậy sau này tôi có thể xem những gì đang diễn ra.


1
có vẻ như, "lệnh" mà họ đang nói đến trong các trang man có nghĩa là một lệnh màn hình, giống như các cài đặt cho chính phiên màn hình. Thay vì gửi các lệnh cho shell, được mở trong phiên màn hình. Vì vậy, bất cứ ai có ý tưởng làm thế nào để làm cho nó xảy ra với một tập lệnh bash ??

@Axon: Có, -X gửi lệnh màn hình, không phải lệnh shell, nhưng màn hình có lệnh 'màn hình' có thể mở cửa sổ màn hình mới.

Câu trả lời:


18

Thật ra nó khá đơn giản. Bạn có thể sử dụng như sau:

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

echo -ne '\015'giả lập nhấn Enterphím.

LƯU Ý: 'công cụ' đó là lệnh màn hình. http://www.gnu.org/software/screen/manual/screen.html#Stuff


Bạn có thể vui lòng chỉ định những gì "công cụ" đại diện? Đó có phải là tên ... hoặc lệnh ... hoặc các tham số khác không?
Cerin

Trên thực tế, nó hoạt động, nhưng tôi sẽ không nói đơn giản là dù sao đi nữa;) Đây là một cái gì đó giống như chuyển các sự kiện nhấn phím và chuyển dòng mới đến màn hình. Không phải chỉ có lệnh thực thi màn hình bình thường sao ...?
ducin

@Cecin: stufflà một lệnh màn hình để 'nhét' một chuỗi vào stdin
konrad

Điều này rất tốt, nhưng vì một số lý do, nó không hoạt động với "session -RdS sessionname -X Stuff 'ls -l' echo -ne '\015'", tại sao?
e271p314

điều này không hoạt động trừ khi tôi chạy lệnh hai lần ... và trên các dòng lệnh riêng biệt ... nếu tôi không làm screen -d -m -S sessionname; screen -S sessionname -X [...]gì thì sẽ không hoạt động thậm chí (screen -d -m -S sessionname&)&sleep 10;screen -S sessionname -X [...]không làm gì ngoại trừ tạo một phiên màn hình mới không làm gì cả. bỏ phiếu xuống
dùng3338098

5

Âm thanh như bạn muốn:

$ screen -S test -d -m -c / dev / null - ngày sh -c '; thực hiện $ SHELL '

-S test: đặt tên cho phiên này
-d -m: màn hình bắt đầu tách ra
-c / dev / null: bỏ qua ~ / .screenrc (cung cấp một tệp khác hoặc bỏ tùy chọn này,
  khi cần thiết)
-: kết thúc tùy chọn màn hình
ngày tháng năm; exec $ SHELL ': lệnh cho màn hình chạy, lưu ý rằng nếu lệnh này
  chỉ là 'ngày' thì màn hình sẽ thoát ngay lập tức. nếu bạn không muốn thoát
  màn hình sau khi lệnh của bạn thoát, sau đó bạn có thể sử dụng:
    $ screen -S test -d -m -c / dev / null - lệnh của bạn ở đây

Hoặc có thể bạn chỉ muốn dtach .


Chạy kết quả này không có gì. Không có thông báo thành công hoặc lỗi, nhưng screen -listcho thấy không có phiên nào được mở.
Cerin

Câu trả lời này đã làm việc cho tôi. Chìa khóa là - để kết thúc các tùy chọn màn hình.
Plazgoth

1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

Mở một cửa sổ mới (với tiêu đề tiêu đề ) trong một phiên tên hiện session_name , và thực hiện shell_command (với đối số tùy chọn args )

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.