Đường ống không có gì để xargs


14

Tôi có một kịch bản mà trong một số trường hợp có thể không có gì trên thiết bị xuất chuẩn. Vào cuối đoạn script, tôi chuyển các dòng tôi có sang một lệnh khác bằng xargs. Vấn đề của tôi là, khi không có gì trên thiết bị xuất chuẩn, tôi nhận được thông báo lỗi "Cách sử dụng: chương trình arg1 arg2" điển hình.

Làm thế nào tôi có thể tránh điều này?


8
Di chuyển "EDIT" của bạn trong một câu trả lời và chấp nhận câu trả lời của riêng bạn. Bằng cách này, những khám phá của bạn sẽ hữu ích cho những người khác. meta.unix.stackexchange.com/questions/809/iêu
andcoz

1
Không có đủ điểm tại thời điểm đó. Sẽ làm điều đó ngay bây giờ.
Richard

Câu trả lời:


13

Bạn cần một -rhoặc --no-run-if-emptytùy chọn.

Hãy nhớ rằng hành vi đặc biệt này là khó thực hiện đa nền tảng. Các phiên bản BSD xargschạy với -rmặc định. Phiên bản GNU cần nó. Phiên bản FreeBSD xargsbỏ qua -rcờ để tương thích với GNU. Phiên bản Mac OS X thậm chí không chấp nhận cờ và ném lỗi illegal option.

Sau đó, bạn có thể chọn sử dụng phát hiện HĐH dựa trên $OSTYPEđể viết tập lệnh đa nền tảng. Thậm chí tốt hơn, cố gắng phát hiện hành vi của xargschính nó. Chạy nó với -rvà nếu thất bại (mã trạng thái> 0), hãy chạy nó mà không có -r.


3

Bài học về lý do tại sao bạn nên đọc trang man

Các cờ -rhoặc --no-run-if-emptylà bạn của tôi.

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.