2013-07-19 58 views
11

Có một số tùy chọn tương tự trong dấu gạch ngang tương ứng với pipefail trong bash không?tương đương với pipefail trong vỏ dash

Hoặc bất kỳ cách nào khác để nhận trạng thái khác 0 nếu một trong các lệnh trong đường dẫn không thành công (nhưng không thoát khỏi lệnh được đặt).

Để làm cho nó rõ ràng hơn, đây là một ví dụ về những gì tôi muốn đạt được:

Trong một gỡ lỗi makefile mẫu, quy tắc của tôi trông như thế này:

set -o pipefail; gcc -Wall $$f.c -o $$f 2>&1 | tee err; if [ $$? -ne 0 ]; then vim -o $$f.c err; ./$$f; fi; 

Về cơ bản nó chạy mở file lỗi và tệp nguồn bị lỗi và chạy chương trình khi không có lỗi. Tiết kiệm cho tôi một số đánh máy. Đoạn mã trên hoạt động tốt trên bash nhưng hệ thống Ubunty mới hơn của tôi sử dụng dấu gạch ngang mà dường như không hỗ trợ tùy chọn pipefail.

tôi về cơ bản muốn có một tình trạng THẤT BẠI nếu phần đầu tiên của nhóm dưới các lệnh thất bại:

gcc -Wall $$f.c -o $$f 2>&1 | tee err 

vì vậy mà tôi có thể sử dụng cho các tuyên bố IF.

Có cách nào khác để đạt được nó không?

Cảm ơn!

+1

Tại sao không chỉ thoát khỏi 'cái tee'? 'if gcc -Wall $$ f.c -o $$ f> $$ f.log 2> & 1; sau đó cat $$ f.log; ./$$f; khác vim -o $$ f.c $$ f.log; fi' (Hoặc, cài đặt 'bash' trên Ubunty. Nó chỉ là một apt-get đi.) – rici

+0

@rici Cảm ơn! Tôi đã sử dụng tee vì tôi cũng muốn đầu ra stderr in ra màn hình - chủ yếu để xem có cảnh báo nào không. Nhưng nếu không có cách nào khác tôi có thể sẽ chuyển sang những gì bạn đề nghị. Về cài đặt bash: Tôi đã giả định (không có bất kỳ nghiên cứu nào) rằng dấu gạch ngang là một bước tiến từ bash nên tôi không muốn quay lại nhưng bây giờ googling một chút về nó có vẻ như có thể không nhất thiết phải như vậy. Tôi sẽ đọc thêm một chút về sự khác biệt và sau đó quyết định. Cảm ơn bạn một lần nữa cho cả hai con trỏ của bạn! – Lavya

+1

Tôi hy vọng rằng các thiết lập-đề cập ở trên sẽ cung cấp cho tôi một dấu gạch ngang tương đương với pipet đặt set -o nhưng không phải như vậy: '$ dash -c 'set -e; sai | con mèo'; echo $? $ ' –

Trả lời

6

Các "chứng khoán" câu trả lời cho POSIX triển khai của PIPESTATUS/pipefail là trong comp.unix.shell FAQ Q11

+3

Điều này không trả lời được câu hỏi. Tài liệu này mô tả cách đặt mã thoát của lệnh đường ống vào các biến riêng biệt. Nhưng đó là khá xa câu hỏi trong tay, mà muốn vỏ để thoát tự động ngay sau khi bất kỳ lệnh đường ống không thành công. "RTFM" chỉ hợp lệ nếu "FM" thực sự trả lời câu hỏi. – vog

Các vấn đề liên quan