2010-04-19 34 views
55

Lệnh $ make all cung cấp các lỗi như rm: cannot remove '.lambda': No such file or directory để dừng. Tôi muốn nó bỏ qua các lỗi rm-not-found. Làm thế nào tôi có thể ép buộc?Tạo: cách tiếp tục sau khi lệnh bị lỗi?

Makefile

all: 
     make clean 
     make .lambda 
     make .lambda_t 
     make .activity 
     make .activity_t_lambda 
clean: 
     rm .lambda .lambda_t .activity .activity_t_lambda 

.lambda: 
     awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda 

.lambda_t: 
     paste .lambda t_year > .lambda_t 

.activity: 
     awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity 

.activity_t_lambda: 
     paste .activity t_year .lambda | sed -e '[email protected]\[email protected]\t\&\[email protected]' -e '[email protected][email protected]\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex 

Trả lời

112

Thử cờ -i (hoặc --ignore-errors). The documentation dường như cho thấy một cách mạnh mẽ hơn để đạt được điều này, bằng cách này:

Để bỏ qua sai sót trong một dòng lệnh, hãy viết một - vào đầu văn bản của dòng (sau khi tab ban đầu). - bị loại bỏ trước khi lệnh được chuyển đến trình bao để thực thi.

Ví dụ,

clean: 
    -rm -f *.o 

Điều này gây rm tiếp tục ngay cả khi nó là không thể loại bỏ một tập tin.

Tất cả các ví dụ đều có rm, nhưng có thể áp dụng cho bất kỳ lệnh nào khác bạn cần bỏ qua lỗi từ (ví dụ: mkdir).

+9

+1 - dấu gạch ngang hàng đầu là những gì anh ta dường như thực sự muốn. –

+13

Đừng * làm * điều đó! Bạn không nên bỏ qua lỗi.Chỉ cần thêm cờ -f vào rm và nó sẽ không còn thất bại khi cố gắng xóa các tập tin không tồn tại. Tuy nhiên nó sẽ vẫn trở lại và lỗi nếu nó thực sự không xóa một tập tin. Đó là hành vi bạn muốn, thất bại khi có vấn đề! –

+3

@Kristof Provost Đồng ý. 'rm -f' là tốt hơn cho vấn đề cụ thể mà người dùng đang gặp phải, nhưng vẫn rất hay khi biết về giải pháp chung ngay cả khi đôi khi không an toàn. –

18

Change sạch để

rm -f .lambda .lambda_t .activity .activity_t_lambda 

Tức là không nhắc xóa; không phàn nàn nếu tập tin không tồn tại.

2

Thay đổi clean của bạn để rm sẽ không phàn nàn:

clean: 
    rm -f .lambda .lambda_t .activity .activity_t_lambda 
19

make -k (hoặc --keep-going trên gnumake) sẽ làm những gì bạn đang yêu cầu, tôi nghĩ.

Bạn thực sự phải tìm đường del hoặc rm bị lỗi và thêm -f vào đó để giữ lỗi đó xảy ra với người khác.

+0

Phiếu bầu không có bình luận? Classy. –

+1

Tôi không muốn nói gì cả, nhưng tôi cũng tự hỏi suy nghĩ của họ là gì. Nếu có lý do nào đó, tôi không hiểu tại sao lá cờ đó không phù hợp, nó sẽ là một điều tốt để đưa lên. –

+1

Bạn không nên bỏ qua lỗi. Giải pháp được đề xuất bởi Brian, Oded và NebuSoft là chính xác. Cái này và câu trả lời được chấp nhận là sai. –

-1

Đặt một tùy chọn -f trong lệnh rm của bạn.

rm -f .lambda .lambda_t .activity .activity_t_lambda 
+0

Các '-' trên câu trả lời được chấp nhận hoạt động cho tất cả các lệnh –

8

Để có được thực hiện để thực sự bỏ qua lỗi trên một dòng duy nhất, bạn chỉ có thể hậu tố nó với ; true, thiết lập các giá trị trả về là 0. Ví dụ:

rm .lambda .lambda_t .activity .activity_t_lambda 2>/dev/null; true 

này sẽ chuyển hướng đầu ra stderr để null, và làm theo lệnh với true (luôn trả về 0, khiến cho việc tin rằng lệnh thành công bất chấp những gì thực sự xảy ra), cho phép luồng chương trình tiếp tục.

+0

Cảm ơn bạn đã bán phá giá văn bản lỗi. –

+1

Điều này phù hợp với tôi, nơi dấu gạch ngang hàng đầu không (tôi được cung cấp một tệp makefile để chạy thử nghiệm cần phải thất bại và sẽ phân tích cú pháp nhật ký sau) –

2

Trở thành công bằng cách chặn rm 's mã trả đằng sau một đường ống với true lệnh, mà luôn luôn trả về 0 (thành công)

rm file | true 
Các vấn đề liên quan