Chạy một chương trình với màn hình GNU và ngay lập tức tách ra sau


27

Tôi đang cố gắng tìm ra cách viết một tập lệnh sẽ khởi động (các) chương trình trong (các) phiên màn hình GNU khi khởi động hệ thống. Tôi đang thử cái này:

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

nhưng lệnh không thể được thực thi vì phiên đã bị tách ra? Điều duy nhất tôi cần là chạy lệnh trong phiên màn hình và tách phiên này ngay lập tức.

Cảm ơn câu trả lời, nhưng bây giờ tôi phải đối mặt với một vấn đề khác. Script ngừng hoạt động sau khi tôi đặt một số biến cho "chương trình và chương trình 2" của mình. Một cái gì đó như thế này:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

vì một số lý do "-f config.cfg" đã bị bỏ qua. Tôi cũng đã cố gắng để trích dẫn lệnh và không giúp đỡ quá.


Tại sao lại -Xchọn?
enzotib

Câu trả lời:


34

Bạn đã thực sự có nghĩa là để đặt \ở cuối dòng? Nếu không thì hãy thử loại bỏ chúng - chúng thoát khỏi ký tự sau.

đồng thời, bỏ công việc -Xgiúp thiết lập cho tôi, ví dụ:

screen -S test -d -m -X touch /tmp/test

thất bại với No screen session found, tuy nhiên:

screen -S test -d -m touch /tmp/test

hoạt động tốt Vì vậy, tôi nghi ngờ những điều sau đây sẽ làm việc cho bạn:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

Hãy nhớ rằng, nếu bạn chạy cái này khi khởi động, $ HOME không giống như sau khi bạn đăng nhập với tư cách là một người dùng cụ thể. Nếu bạn cần chạy nó với tư cách là một người dùng nhất định, bạn sẽ cần sử dụng lượt thích suđể chạy nó với tư cách là người dùng đó và chỉ định đường dẫn đầy đủ sẽ xóa bỏ mọi sự mơ hồ:

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

Hoặc, bạn sẽ gọi toàn bộ kịch bản ở trên là su - username /path/to/your/script.


Cảm ơn câu trả lời, nhưng bây giờ tôi phải đối mặt với một vấn đề khác. Script ngừng hoạt động sau khi tôi đặt một số biến cho "chương trình và chương trình 2" của mình
TbMa

Điều này: screen -S test -d -m $HOME/folder/folder/.programgần như thực hiện chính xác những gì tôi đang tìm kiếm ngoại trừ nếu thư mục / chương trình kết thúc, phiên màn hình sẽ tự động đóng lại. Có cách nào để giữ cho phiên màn hình (shell) chạy ngay cả sau khi chương trình được thực hiện không? Có lẽ thay vì chạy chương trình độc quyền, hãy khởi động một shell để khởi động chương trình và sau đó quay lại dấu nhắc shell, hoặc một cái gì đó?
RocketNuts

4

Giống như Cry Havok đã đề cập, bạn có thể đặt chương trình ngay trên dòng lệnh.

Nếu bạn thực sự phải sử dụng tùy chọn -X, thì a) bạn cần chỉ định lệnh 'màn hình' và b) phiên cần tồn tại trước đó.

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2

Nếu bạn đặt chương trình trên dòng lệnh, màn hình sẽ thoát khi chương trình thoát; Tôi không thấy cờ dòng lệnh để giữ cho màn hình mở nếu bạn muốn xem đầu ra của bàn điều khiển. Nếu bạn khởi động màn hình và gửi các lệnh riêng biệt, như được hiển thị ở đây, bạn có thể cần sleepcác lệnh rõ ràng để đưa ra thời gian màn hình để bắt đầu phiên trước khi gửi lệnh.
Chinasaur

Câu trả lời này rất giống với câu trả lời stackoverflow.com trả lời một câu hỏi tương tự . Tôi thích câu trả lời này hơn @CryHavok vì câu trả lời này thực thi chương trình của bạn bên trong lớp vỏ mặc định của người dùng (@CryHavok chạy chương trình của bạn mà không có vỏ cha mẹ nên khi chương trình chết hoặc bạn ctrl-c thì phiên màn hình bị chấm dứt ngay lập tức)
Trevor Boyd Smith
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.