chmod + modalità silenziosa + come forzare il codice di uscita 0 nonostante l'errore


37

È possibile eseguire chmod e ignorare l'errore dal comando

Esempio (osservazione file.txt non esistente per mostrare l'esempio)

Quando scrivo

chmod 777 file.txt

Ottengo un errore sull'output

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

Quindi aggiungo il flag-f al comando come segue: (file.txt non esiste per mostrare il caso)

  chmod -f 777 file.txt
  echo $?
  1

Ma dall'esempio chmod return 1

Si prega di avvisare come forzare il comando chmod per dare il codice di uscita 0 nonostante l'errore


Perché è stato votato? Sopprime qualsiasi output indesiderato con 2>/dev/nulle utilizza set -enegli script.
ott--

Risposte:


48

Si prega di avvisare come forzare il comando chmod per dare il codice di uscita 0 nonostante l'errore

chmod -f 777 file.txt || :

Questo verrebbe eseguito :, cioè il comando null, se chmodfallisce. Poiché il comando null non fa nulla ma ha sempre successo, vedresti un codice di uscita pari a 0.


25
Equivalente, ma più leggibile per un utente occasionale è usarechmod -f 777 file.txt || true
orion

2
@orion Dipende. Se uno è familiare, allora :sembra ugualmente leggibile.
Devnull

2
Ma se scriviamo un codice più leggibile che i noob possono leggere, come terremo i nostri lavori?
Nick T

1
sviluppatore di chef qui, lasciando cadere alcune parole chiave per aiutare altri che hanno riscontrato lo stesso problema che ho. shell_out! (cmd + '|| true') è un vero toccasana quando stai cercando di essere idempotente con le installazioni e devi ignorare shell_out! compilare errori.
JackChance,

54

chmod -f 777 file.txt || true

Poiché è un OR, se una delle dichiarazioni restituisce true, il ritorno è true. Ciò comporta uno stato di uscita pari a zero.


3
Ho aggiunto questa risposta come alternativa per promuovere la pratica di scrivere codice leggibile.
Gerry,

2
Il ramo giusto di ||non verrà eseguito se ha chmodsuccesso ... non che qui faccia molta differenza computazionale.
Dhag,

Grazie per questo. Non posso credere di aver sbagliato. :) Modificato con la correzione.
Gerry,

5

Ho sempre amato

 chmod -f 777 file.txt || exit 0

3
Questo fa fermare lo script quando chmod non ha avuto successo. La domanda era di far continuare l'esecuzione dello script quando si verificava un problema (ignora errore).
Veda,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.