Encontré lo que creo que es un error en el comando chown
en OS X 11.6. Parece funcionar de manera contraria a su página de manual, ignorando la -f
bandera.
T_MaceT 33 ) chown -f T_MaceT foo
chown: foo: No such file or directory
T_MaceT 34 ) echo $?
1
De acuerdo con la página de manual, usando -f
, debe ignorar que el archivo no existe ni debe cambiar el valor de retorno. (He probado el comportamiento correcto en RedHat 6 para comparar).
No estoy seguro de quién (si alguien) arreglaría este tipo de errores. La página del manual hace referencia a BSD. ¿Hay algún proyecto activo que apoye este tipo de cosas?
No es un error, es una documentación mal escrita. La -f
opción para chown
los estados:
No informe ningún error al cambiar el propietario o el grupo del archivo, ni modifique el estado de salida para reflejar dichos errores.
Esto significa que la -f
opción solo es aplicable si el archivo de destino existe y hubo un error al cambiar el propietario o el grupo del archivo , lo que, por supuesto, no se puede hacer en un archivo inexistente como en el ejemplo de OP en macOS.
Para mostrar que la -f
opción realmente funciona según lo previsto, use el siguiente comando compuesto en Terminal sin hacerlo como root
o usando sudo
:
touch ${TMPDIR}testfile; chown root ${TMPDIR}testfile; echo $?; rm ${TMPDIR}testfile
La salida será, por ejemplo:
chown: /var/folders/7l/lcvbc47n3sd7jcztdhc9c_pw0000gn/T/testfile: Operation not permitted
1
En esta primera forma , sin la -f
opción falla, sale >0, porque el chown
comando está tratando de establecer el propietario de mientras se ejecuta no como y no usando .${TMPDIR}testfile
root
root
sudo
Ahora ejecuta con la -f
opción :
touch ${TMPDIR}testfile; chown -f root ${TMPDIR}testfile; echo $?; rm ${TMPDIR}testfile
La salida será:
0
En esta segunda forma, con la -f
opción , se acierta, se sale con 0 sin haber hecho ningún cambio, porque se hizo no como root
y no usando sudo
, lo cual es necesario para cambiar el dueño de un archivo a root
.
Tenga en cuenta que cada sistema operativo chown
no es igual en todas las funciones entre sí. En otras palabras, aunque no tengo Red Hat, como se menciona en el OP, tengo Linux Mint para comparar, y la página de manual en la -f
opción de Linux Mint para chown
los estados:
suprimir la mayoría de los mensajes de error
Como puede ver, la mayoría es la palabra clave, por lo que no suprime todos los mensajes de error en Linux Mint ni la descripción de lo que -f
hace con chown
Linux Mint es tan detallada y explícita como en macOS.
Entonces, mientras esté en Linux Mint, no como root
o usando sudo
, chown -f root non_existant_filename
no generará un error, sin embargo, su código de salida es 1
, no 0
como en el chown
ejemplo anterior de macOS usando -f
dentro de su contexto definido.
-f
opción no es igual entre las plataformas del sistema operativo o las versiones de chown
. Creo que mi prueba confirma que funciona según lo previsto en macOS. Dicho esto, hay otras formas de codificar para evitar resultados no deseados. Asumiré que está creando una secuencia de comandos en la que solo desea que se muestre una salida limpia, ya que la -f
opción no es realmente necesaria con un único comando emitido en la línea de comando. Continúa en el siguiente comentario.chown root nonexistant_filename 2>/dev/null
ocultará la chown: nonexistant_filename: No such file or directory
salida de error. También en las secuencias de comandos hay formas sencillas de confirmar que el archivo existe antes de intentar actuar sobre él (y probablemente debería hacerse así en muchos casos). Dicho esto, si realmente desea buscar esto como un error o una falla de diseño, el comentario realizado anteriormente por Big Mac contiene algunos enlaces para facilitarlo.fts
funciones se usan para atravesar la jerarquía de archivos, la falla en stat
un archivo dará como resultado que se muestre una advertencia (busque FTS_ERR
). Así que el comportamiento es definitivamente intencional. Se podría argumentar que no es consistente con cp
, mv
etc., pero muchos binarios de Unix no lo son ( awk
por ejemplo, se usa -f
para pasar un archivo de script).
usuario3439894
-f
, debe ignorar que el archivo no existe ni debe cambiar el valor de retorno ". ¡Y eso no es en absoluto lo que dice la página de manual parachown
macOS!fd0
maceto
gran mac