Giả sử có 2 tác vụ t1
, t2
có thể được thực hiện theo cách nối tiếp như sau:
t1 ; t2
# OR
t1 && t2
Bây giờ giả sử tôi quên chạy t2
và t1
đã chạy; Tôi có thể thêm t2
vào đường ống để nó được thực hiện sau khi t1
kết thúc không?
Giả sử có 2 tác vụ t1
, t2
có thể được thực hiện theo cách nối tiếp như sau:
t1 ; t2
# OR
t1 && t2
Bây giờ giả sử tôi quên chạy t2
và t1
đã chạy; Tôi có thể thêm t2
vào đường ống để nó được thực hiện sau khi t1
kết thúc không?
Câu trả lời:
Có bạn có thể:
fg
hoặc %
, thêm những gì bạn muốn vào danh sách và thực hiện nó, ví dụ:
fg ; systemctl suspend # or
% ; systemctl suspend
Vì fg
trả về giá trị trả về của công việc mà nó đã tiếp tục, liệt kê các toán tử thích &&
và ||
làm việc như mong đợi:
fg && echo "Finished successfully!" # or
% && echo "Finished successfully!"
man bash
/ KIỂM SOÁT CÔNG VIỆC nói về nhân vật bị đình chỉ:
Nhập ký tự treo (thông thường
^Z
, Control- Z) trong khi một tiến trình đang chạy khiến quá trình đó bị dừng và trả lại quyền điều khiểnbash
. (...) Người dùng có thể thao tác sau đó tình trạng của công việc này, bằng cách sử dụngbg
lệnh để tiếp tục nó ở chế độ nền, cácfg
lệnh tiếp tục nó ở mặt trước, hoặc cáckill
lệnh để giết nó. A^Z
có hiệu lực ngay lập tức và có tác dụng phụ bổ sung là làm cho đầu ra và kiểu chữ đang chờ xử lý bị loại bỏ.
fg
được giải thích trong man bash
/ SHELL BUILTIN THÔNG TIN :
fg [ jobspec ]
Tiếp tục jobspec ở nền trước và biến nó thành công việc hiện tại. Nếu jobspec không có mặt, khái niệm shell của công việc hiện tại được sử dụng. Giá trị trả về là của lệnh được đặt vào nền trước hoặc thất bại nếu chạy khi điều khiển công việc bị vô hiệu hóa hoặc khi chạy với điều khiển công việc được bật, nếu jobspec không chỉ định một công việc hợp lệ hoặc jobspec chỉ định một công việc được bắt đầu mà không có kiểm soát công việc .
Đọc thêm (ngoài man bash
) về kiểm soát công việc:
^Z^Z
và %-;%+;t3
đủ tốt trong một số trường hợp, nhưng nó không phải là một giải pháp thực sự cho vấn đề.
Tôi đã thấy phương pháp này tại đây: /superuser/334272/how-to-run-a-command-after-an-alpered-rucky-ex hiện-one-fineses
nơi đầu tiên bạn làm Ctrl+ zđể dừng (tạm dừng) lệnh đang chạy sau đó bạn chạy lệnh bị bỏ lỡ như vậy: fg && ./missed_cmd.sh
và nó sẽ chạy ngay khi fg
kết thúc.
Các fg
(foreground lệnh) sẽ mang lại công việc bị đình chỉ trực tuyến và &&
sẽ đảm bảo rằng các lệnh bỏ lỡ chỉ chạy nếu lệnh đầu tiên thành công.
t3
trongt1; t2; t3
hoặct1 && t2 && t3
.