Đợi quá trình hoàn tất trước khi chuyển sang dòng tiếp theo trong shell script


6

Tôi có một kịch bản tôi đã thực hiện để tạo một bản sao lưu. Tôi cần đảm bảo rằng bản sao lưu đã sẵn sàng trước khi nó chạy /home/ftp.shlệnh. Làm thế nào tôi có thể làm như vậy? Tôi sử dụng CentOS 5.6

#!/bin/bash
tar -Pcf /home/temp_backup.tar /home/myfiles/
wait %%
/home/ftp.sh

5
Hiện tại bạn không có bất kỳ chương trình nền nào, vì vậy việc gọi của waitbạn không có ý nghĩa gì. Làm thế nào để bạn xác định "sao lưu đã sẵn sàng"? Nó có vẻ tốt với tôi trong trạng thái hiện tại của nó (mặc dù giả waitlà không cần thiết).
Chris Xuống

Ý tôi là đợi cho đến khi tar -Pcf /home/temp_backup.tar / home / myfiles / kết thúc vì thư mục khổng lồ của nó có thể mất tới vài phút và chỉ khi nó kết thúc /home/ftp.sh
Hujeplet

2
Chúng tôi hiểu ý của bạn là gì, @Hujeplet, nhưng điều mà @ chris-down đang nói là tarlệnh của bạn không được làm nền, vì vậy kịch bản không có lựa chọn nào khác ngoài việc đợi nó kết thúc trước khi thực thi /home/ftp.shtập lệnh.
Tim Kennedy

3
@Hujeplet - Nhưng nó đã làm điều đó ...
Chris Down

Câu trả lời:


9

Bạn đã làm điều đó.

Chờ lệnh kết thúc là hành vi bình thường của shell. (Hãy thử gõ sleep 5tại dấu nhắc shell.) Thời gian duy nhất mà không xảy ra là khi bạn nối thêm &vào lệnh, hoặc khi lệnh riêng của mình làm điều gì đó để có hiệu quả nền chính nó (sau này là một chút của một sự đơn giản hóa).

Bạn có thể xóa wait %%lệnh khỏi tập lệnh của bạn; nó có lẽ chỉ tạo ra một thông báo lỗi như wait: %%: no such job. (Câu hỏi: nó thực sự in một tin nhắn như vậy?)

Bạn có bất cứ bằng chứng nào cho thấy tarlệnh không hoàn thành trước khi /home/ftp.shlệnh bắt đầu không?

Ngẫu nhiên, có một chút kỳ lạ khi có những thứ khác ngoài thư mục nhà của người dùng trực tiếp /home.

(Tôi biết hầu hết những điều này đã được đề cập trong các bình luận, nhưng tôi nghĩ nên có một câu trả lời thực sự.)


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.