Theo câu hỏi:
Có thể biến $?
bị ghi đè khi một lệnh khác được thực thi ở giữa?
Câu trả lời là VÂNG. biến $?
chứa trạng thái thoát của tác vụ cuối cùng. Ví dụ:
$ sai; tiếng vang $?
1
$ sai; thật; tiếng vang $?
0
$ sai; thật; sai; tiếng vang $?
1
Giống như biến $!
chứa PID của tác vụ nền cuối cùng.
Thẩm quyền giải quyết: Devhints.io: Bảng mã kịch bản Bash
Theo câu hỏi:
Là đợi $oldpid
gây rối với cách không đồng bộ của nohup
?
Nó không nên - không phải nó được thiết kế chính xác cho những nhiệm vụ như vậy sao? :)
Theo câu hỏi:
Hoặc có thể logic này chỉ là ngớ ngẩn và đơn giản là có một cách tiếp cận tốt hơn?
Đối với tôi không rõ tại sao bạn đẩy rsync
vào lai lịch và sau đó đợi đã
đối với nó, thay vào đó, chỉ cần thực hiện lệnh và sau đó thực hiện kiểm tra.
#!/bin/bash
rsync -a source.file đích.file 2>/dev/null
nếu [[ $? -eq 0 ]]; sau đó lặp lại "THÀNH CÔNG"; khác lặp lại "THẤT BẠI"; fi
2>/dev/null
được sử dụng ở đây để ngăn chặn các thông báo lỗi của rsync
, nhưng bạn có thể lưu chúng trong tệp tạm thời và đính kèm vào email.
Nhưng có lẽ nó không phải là toàn bộ kịch bản ...
Ngoài ra, trong các hàng đầu tiên của giúp đợi
được cung cấp các thông tin sau.
đợi: đợi [-fn] [id ...]
Đợi công việc hoàn thành và trả lại trạng thái thoát.
Vì vậy, bạn có thể sử dụng đầu ra của đợi đã
trực tiếp trong nếu
bản tường trình. Tôi đã thực hiện thử nghiệm thành công cho phương pháp này.
#!/bin/bash
nohup rsync -a source.file đích.file 2>/dev/null &
oldpid=$!
nếu đợi $oldpid
sau đó
tiếng vang "THÀNH CÔNG"
khác
lặp lại "THẤT BẠI"
fi
2>/dev/null
được sử dụng ở đây để ngăn chặn các thông báo lỗi của nohup
, trong khi rsync
thông báo lỗi đi đâu đó trong nền.