Cách chạy lệnh thứ hai trong cùng một phiên màn hình


12

Tôi đang bắt đầu lệnh đầu tiên trên màn hình như thế này:

screen -d -m -S testen -t lalala watch df -h

cung cấp cho tôi một phiên màn hình đang chạy trong nền và tôi có thể kết nối lại sau.

Làm cách nào tôi có thể chạy lệnh thứ hai trong một cửa sổ mới trong cùng một phiên màn hình?

Câu trả lời:


11

Bắt đầu phiên màn hình được đặt tên ( -S) với cửa sổ có tên ( -t) thích ứng với kích thước đầu cuối ( -A) ở chế độ tách rời ( -d -m):

screen -S mySessionName -t myWinName0 -A -d -m

Bắt đầu một cửa sổ có tên khác ( -t) trong cùng một phiên màn hình ( -S):

screen -S mySessionName -X screen -t myWinName2

Nhồi một vài lệnh ( -X stuff $'cmds') vào cửa sổ có tên đầu tiên ( -p) trong phiên ( -S):

screen -S mySessionName -p myWinName0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'

Nhét một vài lệnh ( -X stuff $'cmds') vào cửa sổ có tên thứ hai ( -p) trong phiên ( -S):

screen -S mySessionName -p myWinName1 -X stuff $'echo myWinName1\necho cmd1\necho cmd2\n'

Liệt kê các phiên màn hình và gắn lại để xem điều gì đã xảy ra:

screen -ls
screen -r mySessionName

Lưu ý: Linefeed ( \n) mô phỏng cách nhấn Enter. Bạn cũng có thể sử dụng dấu chấm phẩy để phân tách các lệnh.


Bạn không phải thực hiện các bit "thứ". screen -S sessionName -t windowName1 -Adm <command> && screen -S sessionName -X screen -t windowName2 -Adm <command2>
Hoa sen

4

Màn hình bên trong:

  • Ctrl-A, cđể mở một cửa sổ shell mới
  • Ctrl-A, :screen newcmdđể chạynewcmd

Ở ngoài:

screen -X testen "screen newcmd"

hi grawity , tôi biết điều này, nhưng tôi muốn làm nó từ một tập lệnh init. về cơ bản tôi muốn bắt đầu 2 lệnh trong các cửa sổ riêng biệt trong cùng một phiên màn hình. thấy bạn

1
@bob: Xem ví dụ # 3, "Màn hình ngoài", trong câu trả lời này.
dùng1686

chào grawity, screen -S testen -X 'screen echo "hi"'không làm việc.

Tôi cũng không thể làm cho phương thức -X hoạt động. Fwiw, màn hình của tôi -v nói "Phiên bản màn hình 4,00,03 (FAU) 23-ngày 10 tháng 10"
Lauri Lehtinen

4

Đã thử cách tiếp cận ở trên, nhưng lệnh thứ hai đã không thực hiện trên cửa sổ thứ hai. Tôi hơi điều chỉnh ví dụ bằng cách sử dụng số cửa sổ, thay vì tên cửa sổ:

  1. tạo phiên

    screen -S mySessionName -t 0 -A -d -m
    
  2. tạo cửa sổ thứ hai

    screen -S mySessionName -X screen -t 1
    
  3. gửi lệnh đến cửa sổ đầu tiên

    screen -S mySessionName -p 0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
  4. gửi lệnh đến cửa sổ thứ hai

    screen -S mySessionName -p 1 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
  5. Bây giờ hãy kiểm tra xem lệnh đã được chạy trên cửa sổ đầu tiên chưa

    screen -R mySessionName -p 0
    
  6. Bây giờ hãy kiểm tra xem lệnh đã được chạy trên cửa sổ thứ hai chưa

    screen -R mySessionName -p 1
    

Đã thử nghiệm với Màn hình 4,00,03 (CENTOS 6.3 x64).


1

Bạn có thể thiết lập một .screenrc thay thế thông qua -cđối số. Trong screenrc mới này, bạn có thể thiết lập nhiều lệnh để bắt đầu khi phiên màn hình được khởi tạo.

Khi kết thúc .screenrc thay thế này, hãy đặt các lệnh sau:

screen 1 cmd1 args
screen 2 cmd2 args

Bạn không cần thiết lập tệp cấu hình thay thế nếu bạn chỉ có kế hoạch chạy một loại phiên màn hình và các lệnh mặc định luôn chạy tốt.

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.