Buộc một nhiệm vụ phức tạp nền để fg chính nó?


0

Tôi sẽ thường chạy một nhiệm vụ giám sát đơn giản như sau:

(sleep 600 && ls -lh /path/to/files)&

Có thể có quá trình khử nền một phần trong? Ví dụ, để lấy id công việc vào $jobid(hoặc tương tự), và sau đó khi sleepkết thúc, làm một fg $jobid?

Điều này có thể yêu cầu một số bash-fu phức tạp hơn, tôi biết, nhưng bất kỳ giải pháp nào cũng tốt để xem (đặc biệt là nếu chỉ có fgthể nếu không có quá trình tương tác nào khác đang chạy).

Câu trả lời:


1

Một tập lệnh không tương tác có tắt điều khiển công việc theo mặc định, nhưng bạn có thể kích hoạt nó với set -mhoặc set -o monitor. Đây là một kịch bản ví dụ:

# turn on job control
set -o monitor

# start a background task
( sleep 10 && echo "slept 10 seconds" ) &

# do something else
sleep 5
echo "slept 5 seconds"

# bring the background task into the foreground
fg

echo "done"

Đây là đầu ra của nó khi chạy với dấu vết ( bash -x script.sh):

+ set -o monitor
+ sleep 5
+ sleep 10
+ echo 'slept 5 seconds'
slept 5 seconds
+ fg
( sleep 10 && echo "slept 10 seconds" )
+ echo 'slept 10 seconds'
slept 10 seconds
+ echo done
done
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.