2010-01-05 34 views
8

Đã tự hỏi làm thế nào tôi có thể bắt đầu lập một lệnh như:Khởi động màn hình (lệnh unix) + chạy lệnh trong lệnh 1?

while :; do ./myCommand; done; 

Nhưng thay vì làm như thường lệ

screen -S nameOfMyScreen 

Sau đó, lệnh

while :; do ./myCommand; done; 

Sau đó tách màn hình

^a ^d (Control "a" the control "d" 

Tôi muốn nó bắt đầu và tách rời. Cảm ơn!

Trả lời

10
screen -d -m sh -c "while :; do ./myCommand; done;" 

Giải thích:

  • -d -m bắt đầu màn hình ở chế độ tách ra (tạo phiên nhưng không đính kèm với nó)
  • sh -c commandline bắt đầu một vỏ mà thực thi dòng lệnh nhất định (cần thiết, vì bạn đang sử dụng nội trang while).
+0

Phiên bản màn hình trên hệ thống của tôi nói rằng tùy chọn -c là đọc tệp cấu hình thay thế thay vì .screenrc. – MikeSep

+0

'-c' không được chuyển tới màn hình mà là' sh'. Sau khi trình phân tích cú pháp dòng lệnh đọc 'sh' (tức là một thứ không có dấu gạch ngang), nó biết rằng không còn tùy chọn nào nữa và mọi thứ khác là một lệnh nên được thực hiện. – Heinzi

+0

Ahh, tôi đã sửa chữa. :) – MikeSep

3

Từ screen -h, những tìm kiếm hữu ích:

-dmS name  Start as daemon: Screen session in detached mode. 
-X   Execute <cmd> as a screen command in the specified session. 

tôi đã không làm điều này bản thân mình, nhưng đó là nơi tôi muốn bắt đầu.

Cập nhật:

Đỉnh của sự giúp đỡ cũng nói

Use: path/to/screen [-opts] [cmd [args]] 

nên -X chuyển đổi có thể thực hiện một màn hình lệnh như trái ngược với một vỏ lệnh. Bạn chỉ có thể đặt lệnh sau -dmS <name> mà không cần chuyển đổi -X.

+0

+1. Một sự kết hợp của những điều này sẽ làm công việc của bạn. Vì lệnh * của bạn * là một tập lệnh, bạn có thể phải đặt nó vào một tệp và chuyển nó hoặc sử dụng 'bash -c' hoặc một cái gì đó tương tự. –

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