chmod + tryb cichy + jak wymusić kod wyjścia 0 pomimo błędu

37

Czy to możliwe, wykonaj chmod i zignoruj ​​błąd z polecenia

Przykład (uwaga file.txt nie istnieje, aby pokazać przykład)

Kiedy piszę

chmod 777 file.txt

Na wyjściu pojawia się błąd

  chmod: cannot access file.txt : no such file or directory

Dodam więc flagę-f do polecenia w następujący sposób: (plik.txt nie istnieje, aby pokazać wielkość liter)

  chmod -f 777 file.txt
  echo $?
  1

Ale z przykładu chmod zwraca 1

Proszę poradzić, jak wymusić na komendzie chmod podanie kodu wyjścia 0 pomimo błędu

Gilles „SO- przestań być zły”
źródło
Dlaczego jest to pozytywnie ocenione? Pomiń niechciane dane wyjściowe 2>/dev/nulli użyj ich set -ew skryptach.
ott--

Odpowiedzi:

47

Proszę poradzić, jak wymusić na komendzie chmod podanie kodu wyjścia 0 pomimo błędu

chmod -f 777 file.txt || :

Wykonałoby się to :, tzn. Polecenie zerowe, jeśli się chmodnie powiedzie. Ponieważ polecenie null nic nie robi, ale zawsze kończy się powodzeniem, zobaczysz kod wyjścia 0.

diabelnie
źródło
25
Odpowiednim, ale bardziej czytelnym dla zwykłego użytkownika jest użyciechmod -f 777 file.txt || true
orion 5'14
2
@orion Zależy. Jeśli ktoś jest zaznajomiony, :wydaje się równie czytelny.
devnull
2
Ale jeśli napiszemy bardziej czytelny kod, który noobowie mogą odczytać, w jaki sposób utrzymamy naszą pracę?
Nick T
1
programista kucharza tutaj, po prostu upuszczając kilka słów kluczowych, aby pomóc innym, którzy napotkali ten sam problem, który mam. shell_out! (cmd + '|| true') to ratownik, gdy próbujesz być idempotentny w instalacjach i musisz zignorować shell_out! błędy kompilacji.
JackChance,
53

chmod -f 777 file.txt || true

Ponieważ jest to operacja OR, jeśli jedna z instrukcji zwraca true, wówczas zwracana wartość jest true. Powoduje to, że status wyjścia wynosi zero.

Gerry
źródło
3
Dodałem tę odpowiedź jako alternatywę dla promowania praktyki pisania czytelnego kodu.
Gerry
2
Właściwa gałąź ||nie zostanie wykonana, jeśli odniesie chmodsukces ... nie dlatego, że ma to znaczącą różnicę obliczeniową.
dhag
Dziękuję za to. Nie mogę uwierzyć, że to popsułem. :) Edytowane z poprawką.
Gerry
5

Zawsze kochałem

 chmod -f 777 file.txt || exit 0
Eran Chetzroni
źródło
3
To powoduje, że skrypt przestaje działać, gdy chmod się nie powiódł. Pytanie polegało na tym, aby skrypt nadal działał, gdy wystąpił problem (zignoruj ​​błąd).
Veda,