Lệnh bash không chặn


11

Giả sử tôi có một tập lệnh bash với các phần sau:

#!/bin/sh
gedit
rm *.temp

Khi tôi thực hiện nó bằng cách sử dụng sh ./test.sh, geditbật lên nhưng rmphần không chạy cho đến khi tôi đóng gedit.

Tôi muốn tập lệnh tiếp tục chạy ngay cả khi geditkhông đóng; giống như geditkhông chặn thực thi bash.

Ví dụ tôi đưa ra chỉ là một ví dụ (đặt cái rmđầu tiên sẽ không hoạt động trong tình huống thực tế).

Câu trả lời:


25

Thuật ngữ bạn đang tìm kiếm được gọi là "nền" một công việc. Khi bạn chạy một lệnh trong shell của bạn hoặc trong một tập lệnh, bạn có thể thêm một cờ ở cuối để gửi nó đến nền và tiếp tục chạy các lệnh mới hoặc phần còn lại của tập lệnh. Trong hầu hết các shell bao gồm sh, đây là &nhân vật.

#!/bin/sh
gedit &
rm ./*.temp

Theo cách đó, shell không chờ kết thúc geditvà cả hai rmgeditsẽ chạy đồng thời.

Thuật ngữ "chặn" thường phải thực hiện với các luồng đầu vào / đầu ra, thường là các tệp hoặc thiết bị. Nó cũng được sử dụng trong các ngôn ngữ được biên dịch theo nghĩa tương tự như nghĩa bạn đã sử dụng, nhưng trong bash và kịch bản shell tương tự, thuật ngữ (và hàm!) Hoàn toàn khác nhau.


cảm ơn bạn! điều đó giải thích tại sao tôi chỉ nhận được fifo và kết quả đầu vào trên google: D
Plante

Ấn tượng của tôi là, Plante muốn tác động đến một kịch bản từ bên ngoài, để thực hiện từng thao tác ở chế độ nền chứ không phải viết lại kịch bản.
người dùng không xác định

@user: Tôi phải mất một vài lần đọc để đoán xem anh ta muốn gì. Có lẽ bạn có thể nhận xét về câu hỏi để làm rõ.
Caleb

Đó chính xác là những gì tôi cần, cảm ơn một lần nữa. làm việc tuyệt vời cho đến nay!
Plante
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.