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.