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.