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!
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
@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
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 $? $ ' –