chmod + mode silencieux + comment forcer la sortie du code 0 malgré l'erreur


37

Est-il possible d'exécuter chmod et d'ignorer l'erreur de la commande

Exemple (remarque fichier.txt non existant pour montrer l'exemple)

Quand je tape

chmod 777 file.txt

Je reçois une erreur sur la sortie

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

Donc, j'ajoute l'indicateur-f à la commande comme suit: (fichier.txt n'existe pas pour montrer le cas)

  chmod -f 777 file.txt
  echo $?
  1

Mais de l'exemple chmod retour 1

Veuillez indiquer comment forcer la commande chmod à donner le code de sortie 0 malgré l'erreur


Pourquoi est-ce voté? Supprimez toute sortie indésirable avec 2>/dev/nullet l'utilisation set -edans les scripts.
ott--

Réponses:


48

Veuillez indiquer comment forcer la commande chmod à donner le code de sortie 0 malgré l'erreur

chmod -f 777 file.txt || :

Ceci exécuterait :, c’est-à-dire la commande null, si chmodéchouait. Comme la commande null ne fait rien mais réussit toujours, vous verriez un code de sortie de 0.


25
Équivalent, mais plus lisible pour un utilisateur occasionnel, c'est à utiliserchmod -f 777 file.txt || true
orion

2
@orion dépend. Si on est familier, alors :semble tout aussi lisible.
devnull

2
Mais si nous écrivons un code plus lisible que les noobs peuvent lire, comment allons-nous conserver nos emplois?
Nick T

1
chef développeur ici, laissant tomber quelques mots clés pour aider les autres qui ont rencontré le même problème que moi. shell_out! (cmd + '|| true') est une bouée de sauvetage lorsque vous essayez d'être idempotent avec les installations et que vous devez ignorer shell_out! compiler les erreurs.
JackChance

54

chmod -f 777 file.txt || true

Comme il s’agit d’un OU, si l’une des déclarations renvoie true, le retour est vrai. Cela entraîne un état de sortie égal à zéro.


3
J'ai ajouté cette réponse comme alternative pour promouvoir la pratique d'écriture de code lisible.
Gerry

2
La bonne branche de ||ne sera pas exécutée si elle chmodréussit ... pas que cela fasse une grande différence de calcul ici.
Dhag

Merci pour ça. Je ne peux pas croire que j'ai tout gâché. :) Édité avec la correction.
Gerry

5

J'ai toujours aimé

 chmod -f 777 file.txt || exit 0

3
Cela arrête le script lorsque chmod a échoué. La question était de faire en sorte que le script continue à s'exécuter lorsqu'il y avait un problème (ignorer l'erreur).
Veda
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.