Yap: Bir komut başarısız olduktan sonra nasıl devam edilir?


143

Komut durması $ make allgibi hatalar verir rm: cannot remove '.lambda': No such file or directory. Ben rm-not-found-hataları yoksaymak istiyorum. Nasıl zorlayabilirim?

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 's@\t@\t\&\t@g' -e 's@$$@\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex

Yanıtlar:


264

-iBayrağı (veya --ignore-errors) deneyin . Belgeler bu şekilde bunu başarmanın daha sağlam bir yolunu gösteriyor gibi görünüyor:

Komut satırındaki hataları yok saymak -için satır metninin başına (ilk sekmeden sonra) a yazın. -Komut yürütme için kabuk geçmeden önce atılır.

Örneğin,

clean:
  -rm -f *.o

Bu rm, bir dosyayı kaldıramasa bile devam etmesine neden olur .

Tüm örnekler vardır rm, ancak hataları (yani mkdir) yok saymanız gereken diğer komutlar için geçerlidir .


30
Bunu yapma ! Hataları görmezden gelmemelisiniz. Rm'ye -f bayrağını eklemeniz yeterlidir; var olmayan dosyaları silmeye çalışırken artık başarısız olmaz. Bununla birlikte, bir dosyayı gerçekten silemezse yine de geri dönüp hata verecektir. İstediğiniz davranış budur, bir sorun olduğunda başarısız olun!
— Kristof Provost

15
@Kristof Provost Kabul Edildi. rm -fkullanıcının yaşadığı belirli sorun için daha iyidir, ancak bazen güvensiz olsa bile genel çözüm hakkında bilmek güzeldir.
— brian_o

1
Bu gerçekten faydalı, Eli. Teşekkür ederim.
— Dr Beco

1
Make ayrıca $(RM)yerine kullanabileceğiniz sağlar rm -f.
— reitermarkus

32

make -k(veya --keep-goinggnumake'de) istediğini yapacak, sanırım.

Gerçekten başarısız del veya rm satır bulmak ve -fbu hatayı başkalarına olmasını önlemek için bir eklemek gerekir.


1
Hiçbir şey söylemek istemedim, ama düşüncelerinin de ne olduğunu merak ediyordum. Bu bayrağın neden uygun olmayacağını görmememin bir nedeni varsa, ortaya çıkarmak iyi bir şey olurdu.
— TED

3
Hataları görmezden gelmemelisiniz. Brian, Oded ve NebuSoft tarafından önerilen çözüm doğrudur. Bu ve kabul edilen cevap yanlış.
— Kristof Provost

1
@KristofProvost - Ah. Sanırım yeterince adil. Genellikle sorunun temelini oluşturan cevapların (bu gibi), sorulan soruya cevap verenlerden daha üstün olduğuna inanıyorum. Birini bunun için indireceğimden emin değilim , ama farklı vuruşlar ...
— TED

5
Güzel cevap. Başka bir yanıt içermeyen basit, üst düzey bir bayrak içerir, ancak yine de doğru davranışı önerir. Hatalar göz ardı edilmemelidir, ancak seçenekleri bilmek iyidir.
— brian_o

1
Yararlı bir şey, derleyici hatalarını göz ardı etmektir ... Bu make, derleyicinin tıkanması ne olursa olsun düzeltmeye devam ederken mümkün olduğunca çok sayıda derleme birimi oluşturmaya izin verir . Bu şekilde, kırılan her şeyi düzelttiğinizde, diğer her şeyin de inşa edilmesini beklemek zorunda kalmazsınız.
— inetknght

20

Temiz olarak değiştir

rm -f .lambda .lambda_t .activity .activity_t_lambda

Kaldırmak istemiyorum; dosya yoksa şikayet etmeyin.


16

Her zaman döndüren komutla rmbir borunun arkasındaki dönüş kodunu engelleyerek başarılı bir şekilde geri dönün (başarı)true0

rm file | true

11

Tek bir satırdaki hataları gerçekten yok saymak ; trueiçin, dönüş değerini 0 olarak ayarlayarak son ekleyebilirsiniz. Örneğin:

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

Bu, stderr çıktısını null değerine yönlendirir ve komutu true (her zaman 0 döndürerek komutun gerçekte ne olduğuna bakılmaksızın başarılı olduğuna inanmaya neden olur) ile izleyerek program akışının devam etmesini sağlar.


1
Bu benim için önde gelen çizgi değil (başarısız olması gereken ve daha sonra günlükleri ayrıştırmak için bir test çalıştırmak için bir makefile verildi) benim için çalışıyor
— Sean Houlihane

2

Senin değiştirin cleanSo rmşikayet olmaz:

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

1

Komutunuza bir -fseçenek koyun rm.

rm -f .lambda .lambda_t .activity .activity_t_lambda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.