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

Gilles, arrête de faire le mal
la source
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.

devnull
la source
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.

Gerry
la source
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
Eran Chetzroni
la source
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