chmod + modo silencioso + cómo forzar el código de salida 0 a pesar del error

37

¿Es posible ejecutar chmod e ignorar el error del comando

Ejemplo (el archivo de comentarios.txt no existe para mostrar el ejemplo)

Cuando escribo

chmod 777 file.txt

Me sale un error en la salida

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

Entonces agrego la bandera-f al comando como sigue: (file.txt no existe para mostrar el caso)

  chmod -f 777 file.txt
  echo $?
  1

Pero del ejemplo chmod return 1

Indique cómo obligar al comando chmod a dar el código de salida 0 a pesar del error

Gilles 'SO- deja de ser malvado'
fuente
¿Por qué es eso votado? Suprima cualquier salida no deseada 2>/dev/nully úsela set -een scripts.
ott--

Respuestas:

48

Indique cómo obligar al comando chmod a dar el código de salida 0 a pesar del error

chmod -f 777 file.txt || :

Esto se ejecutaría :, es decir, el comando nulo, si chmodfalla. Dado que el comando nulo no hace nada pero siempre tiene éxito, verá un código de salida de 0.

devnull
fuente
25
Equivalente, pero más legible para un usuario casual es usarchmod -f 777 file.txt || true
orion
2
@orion depende. Si uno está familiarizado, entonces :parece igualmente legible.
devnull
2
Pero si escribimos código más legible que los novatos puedan leer, ¿cómo mantendremos nuestros trabajos?
Nick T
1
chef desarrollador aquí, solo dejando caer algunas palabras clave para ayudar a otros que han encontrado el mismo problema que yo. shell_out! (cmd + '|| true') es un salvavidas cuando intentas ser idempotente con las instalaciones y necesitas ignorar shell_out! errores de compilación
JackChance el
54

chmod -f 777 file.txt || true

Como es un OR, si una de las declaraciones devuelve verdadero, entonces el retorno es verdadero. Esto da como resultado un estado de salida de cero.

Gerry
fuente
3
Agregué esta respuesta como una alternativa para promover la práctica de escribir código legible.
Gerry
2
La rama derecha de ||no se ejecutará si chmodtiene éxito ... no es que haga una gran diferencia computacional aquí.
Dhag
Gracias por eso. No puedo creer que haya arruinado eso. :) Editado con la corrección.
Gerry
5

Siempre amé

 chmod -f 777 file.txt || exit 0
Eran Chetzroni
fuente
3
Esto hace que el script se detenga cuando chmod no tuvo éxito. La pregunta era hacer que el script continuara ejecutándose cuando hubiera un problema con él (ignorar el error).
Veda