Có phải chờ đợi & & ((


12

Tôi đã "kế thừa" một số tập lệnh shell cho các máy Linux chạy shell "bash" GNU. Trong một trường hợp cụ thể, máy chạy GNU bash phiên bản 2.0.5b

Một trong những tập lệnh này có lệnh wait &("chờ ampersand") như là một phần của "for line" của forvòng lặp. Thoạt nhìn, đó có vẻ là một thành ngữ gây tò mò / thú vị, nhưng các tìm kiếm trên web của tôi cho nó không trả về bất cứ điều gì có liên quan. man waithiển thị trang quản lý "BASH_BUILTINS" ("BASH BUILTINS"), có mô tả sau:

wait [n]  
  Wait for the specified process and return its termination status.
  n may be a process ID or a job spec­ification;  if  a  job spec is given,
  all processes in that job's pipeline are waited for.  If n is not
  given, all currently active child processes are waited for, and the 
  return status is zero. If n speci­fies a non-existent process or job, 
  the return status is 127.  Otherwise, the return status is the exit 
  status of the last process or job waited for.

Bằng cách đọc phần đó của trang này, đối với tôi, dường như tôi wait &đang âm thầm (trong nền) đảm bảo rằng " tất cả các quy trình con hiện đang hoạt động đều được chờ đợi và trạng thái trả về bằng không ." Tôi có đúng trong cách giải thích này? Đây có phải là một thành ngữ phổ biến và / hoặc hữu ích?

Để thêm ngữ cảnh, tôi đang nói về loại sử dụng sau đây trong tập lệnh:

for file in `ls *.txt ; wait &`
do
   ...
   [cp instructions]
   ...
   [mv instructions]
   ...
   [mailx instruction]
done

Câu trả lời:


14

Tôi không thể tưởng tượng bất kỳ lý do nào để viết mã này và tôi không chắc người viết mã này đã cố gắng đạt được điều gì. waitở đây không có gì - từ quan điểm của mình, có không có tiến trình con, vì vậy nó sẽ chỉ thoát ngay lập tức và về cơ bản đóng vai trò như một noop ( waittự thực hiện trong một quá trình con do thay thế lệnh, nhưng đó là không liên quan).

Bên cạnh đó, phân tích cú pháp đầu ra của ls khá mong manh . Thay vào đó, hãy xem xét chỉ làm điều này:

for file in *.txt; do
    ...
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.