Gửi lệnh đến thiết bị đầu cuối màn hình của người dùng khác


3

Tôi có hai người dùng; người dùng1 và người dùng2. Tôi có một tập lệnh bash được chạy bởi user1, cần chạy một lệnh trên thiết bị đầu cuối màn hình được bắt đầu bởi user2. Gợi ý? Cảm ơn tối đa

Câu trả lời:


4

Bạn có muốn nó trông như thể user2 gõ lệnh không?

Trong trường hợp screen, bạn có thể sử dụng

screen -S user2/sessionname -p windowname -X stuff "~user1/somescript.sh
"

Thao tác này sẽ nhập văn bản ~user1/somescript.sh(tham chiếu đến một tệp trong thư mục chính của user1) vào một cửa sổ cụ thể của phiên màn hình đã cho và gửi một ký tự dòng mới.

(Có, dòng thứ hai "phải ở một dòng mới, nếu không bạn sẽ chỉ gửi văn bản và phải nhấn return trong phiên màn hình. Cách khác, sử dụng $'stuff blah\n')

Để làm điều này, bạn sẽ cần có quyền truy cập ghi vào user2/sessionname; đọc trang hướng dẫn của màn hình để mô tả multiuseracladd.


Trong trường hợp "chạy công cụ trên một tty" chung khác, bạn có thể sử dụng writevt /dev/pts/X sometext; các writevtcông cụ là một phần của console-tools gói. Nếu distro của bạn sử dụng kbd thay thế, hãy lấy writevt.c. Điều này là dành riêng cho Linux.

Hay bạn chỉ muốn user2 xem đầu ra ?

./somescript.sh >& /dev/pts/X

nơi /dev/pts/Xlà thiết bị tty thuộc về màn hình user2 của.

Bạn sẽ cần truy cập ghi; điều này có thể được đưa ra bởi user2 với chmod / setfacl hoặc bạn có thể sử dụng sudo.

( >& filetương đương với > file 2>&1, chuyển hướng cả thiết bị xuất chuẩn và thiết bị xuất chuẩn vào tệp đã cho.)


Cảm ơn câu trả lời; để làm rõ, tôi cần phải hoàn thành mục tiêu đầu tiên (xem như user2 đã gõ lệnh). Sự khác biệt giữa tên màn hình và Windowname là gì? Tôi nhìn qua trang người đàn ông để xem màn hình, nhưng không thể tìm thấy gì. Cảm ơn
Ben

@mazzzzz: Một người dùng có thể có nhiều phiên 'màn hình' (Tôi nghĩ rằng tôi nên sử dụng tên phiên thay vì tên màn hình ). Mỗi phiên có thể có nhiều cửa sổ. (Có nhiều cửa sổ được hiển thị trong bố cục lát gạch là phổ biến: Ca :split)
grawity 23/03

Và nếu bạn chỉ có một cửa sổ, tên của nó sẽ là gì? Nó có một tên mặc định, hoặc tôi cần tìm nó ở đâu đó?
Ben

@mazzzzz: Chỉ cần bỏ qua tùy chọn -p.
grawity

Không biết đây có phải là cách thực hành tốt nhất không, nhưng nó hoạt động :) Khởi động người dùng webhost, sau đó chạy một màn hình trong đó, sau đó su vào người dùng máy chủ, sau đó chạy máy chủ. Haha, có gì đó không đúng với điều đó Cảm ơn sự giúp đỡ (và nếu bạn có cách tốt hơn để thiết lập nó, tôi là tất cả các tai)
Ben
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.