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

Gilles 'SO - hör auf böse zu sein'
quelle
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.

devnull
quelle
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.

Gerry
quelle
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
Eran Chetzroni
quelle
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