chmod + Silent Mode + Wie erzwinge ich trotz Fehler den Exit Code 0?


37

Ist es möglich, chmod auszuführen und Fehler vom Befehl zu ignorieren

Beispiel (Bemerkungsdatei.txt nicht vorhanden, um das Beispiel zu zeigen)

Wenn ich tippe

chmod 777 file.txt

Ich bekomme einen Fehler bei der Ausgabe

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

Also füge ich dem Befehl das -f-Flag wie folgt hinzu: (file.txt existiert nicht, um den Fall zu zeigen)

  chmod -f 777 file.txt
  echo $?
  1

Aber aus dem Beispiel chmod return 1

Bitte geben Sie an, wie Sie den Befehl chmod zwingen können, trotz eines Fehlers den Exit-Code 0 zu vergeben


Warum ist das verärgert? Unterdrücke unerwünschte Ausgaben mit 2>/dev/nullund verwende sie set -ein Skripten.
ott--

Antworten:


47

Bitte geben Sie an, wie Sie den Befehl chmod zwingen können, trotz eines Fehlers den Exit-Code 0 zu vergeben

chmod -f 777 file.txt || :

Dies würde ausgeführt :, dh der Null-Befehl, wenn dies chmodfehlschlägt. Da der Befehl null nichts bewirkt, aber immer erfolgreich ist, wird der Beendigungscode 0 angezeigt.


25
Gleichwertig, aber für einen Gelegenheitsbenutzer besser lesbar istchmod -f 777 file.txt || true
orion

2
@orion Hängt ab. Wenn man sich auskennt, dann :scheint das gleich gut lesbar zu sein.
Devnull

2
Aber wenn wir lesbareren Code schreiben, den die Noobs lesen können, wie behalten wir dann unsere Jobs?
Nick T

1
Chefentwickler hier, lassen nur einige Schlüsselwörter fallen, um anderen zu helfen, die auf dasselbe Problem gestoßen sind, das ich habe. shell_out! (cmd + '|| true') ist ein Lebensretter, wenn Sie versuchen, bei Installationen idempotent zu sein und shell_out ignorieren müssen! Kompilierfehler.
JackChance

53

chmod -f 777 file.txt || true

Wenn eine der Anweisungen true zurückgibt, ist die Rückgabe true, da es sich um ein OR handelt. Dies führt zu einem Ausgangsstatus von Null.


3
Ich habe diese Antwort als Alternative hinzugefügt, um das Schreiben von lesbarem Code zu fördern.
Gerry

2
Der richtige Zweig von ||wird nicht ausgeführt, wenn er chmoderfolgreich ist ... nicht, dass er hier einen großen rechnerischen Unterschied macht.
Dhag

Danke für das. Ich kann nicht glauben, dass ich das durcheinander gebracht habe. :) Mit der Korrektur bearbeitet.
Gerry

5

Ich habe immer geliebt

 chmod -f 777 file.txt || exit 0

3
Dadurch wird das Skript angehalten, wenn chmod nicht erfolgreich war. Die Frage war, ob das Skript weiter ausgeführt werden soll, wenn ein Problem aufgetreten ist (Fehler ignorieren).
Veda
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.