Chạy script trong màn hình


25

Tôi muốn chạy một tập lệnh bash trong một màn hình tách rời. Kịch bản gọi một chương trình một vài lần, mỗi lần mất quá nhiều thời gian để chờ đợi. Suy nghĩ đầu tiên của tôi chỉ đơn giản là mở một màn hình và sau đó gọi kịch bản, nhưng dường như tôi không thể tách ra (bởi ctrl-a d) trong khi tập lệnh đang chạy. Vì vậy, tôi đã thực hiện một số nghiên cứu và tìm thấy hướng dẫn này để thay thế shebang bằng cách sau:

#!/usr/bin/screen -d -m -S screenName /bin/bash

Nhưng điều đó cũng không hiệu quả (các tùy chọn không được công nhận). Bất kỳ đề xuất?

PS Nó xảy ra với tôi bây giờ screen -dmS name ./script.shcó lẽ sẽ hoạt động cho mục đích của tôi, nhưng tôi vẫn tò mò về cách kết hợp điều này vào kịch bản. Cảm ơn bạn.

Câu trả lời:


28

Dòng shebang bạn đã thấy có thể hoạt động trên một số biến thể unix, nhưng không phải trên Linux. Các dòng shebang của Linux bị hạn chế: bạn chỉ có thể có một tùy chọn. Toàn bộ chuỗi -d -m -S screenName /bin/bashđược truyền dưới dạng một tùy chọn duy nhất screen, thay vì được truyền dưới dạng các từ khác nhau.

Nếu bạn muốn chạy tập lệnh bên trong màn hình và không phải loay hoay với nhiều tập tin hoặc trích dẫn, bạn có thể đặt tập lệnh thành tập lệnh shell để gọi màn hình nếu chưa có trong màn hình.

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff

Nó hoạt động tốt, những gì "$0"cho ở đây?
Fabich

4
@Lordofdark Đó là tên tập lệnh. Kịch bản gọi screenmà gọi /bin/bashlại kịch bản một lần nữa.
Gilles 'SO- ngừng trở nên xấu xa'

16

Theo các trang màn hình:

  • screen -d -m Màn hình bắt đầu ở chế độ tách rời. Điều này tạo ra một phiên mới nhưng không đính kèm. Điều này rất hữu ích cho các kịch bản khởi động hệ thống.
  • -S sessionname Đặt tên của phiên mới thành tên phiên.

Vì vậy, khi tôi chạy lệnh bạn đã cung cấp: screen -dmS name ./script.sh

Màn hình bắt đầu một cửa sổ được gọi tên và tự động chạy script.sh. Để quay lại đó để xem trạng thái bạn chỉ cần gõ:screen -r test

Bây giờ với Ubuntu 14.04, các lệnh hơi khác nhau. Thử:

screen -d -m -S test

Bây giờ để chạy tập lệnh, bạn sẽ cần truy cập tệp cấu hình của chúng để thực hiện:

sudo vim /etc/screenrc

Khi đó, cuộn xuống phía dưới và bạn sẽ thấy:

# Example of automatically running some programs in windows on screen startup.
#
#   The following will open top in the first window, an ssh session to monkey
#   in the next window, and then open mutt and tail in windows 8 and 9
#   respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log

Đây là phần mà bạn sẽ cần thêm tên tập lệnh để chạy và điều đó sẽ cho phép bạn làm mọi thứ bạn cần từ màn hình.


Bằng cách nào đó, lệnh ( screen -dmS ...) không hoạt động với tôi, mặc dù nó thực sự nên. Tôi chạy nó và sau đó screen -lsvà không có ổ cắm được tìm thấy. Suy nghĩ?
bongbang

Bạn đang sử dụng bản phân phối nào?
ryekayo

NAME = "Ubuntu" VERSION = "14.04.1 LTS, Trusty Tahr" Tôi nghĩ vậy. Đó là một máy ảo.
bongbang

Hãy tham gia một chút vì tôi vừa mới nghỉ việc và cố gắng sử dụng màn hình trên máy của tôi, cũng là Ubuntu 14.04
ryekayo

@bongbang - Bạn có phiên bản màn hình nào?
slm

3

Điều này hơi cũ nhưng một trong số ít chủ đề tôi có thể tìm thấy để làm điều này. Sau khi chơi đồ chơi, cách duy nhất để chạy cái này ở chế độ tách rời với ubfox 14. là

screen -d -m -t nameofwindow sh nameoflaunch.sh

Việc khởi chạy sẽ là phần thứ hai ở trên chứa các lệnh java và phiên bản máy chủ hiện tại. Tôi chạy vani.

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.