Error en BSD: ¿a quién debo reportarlo?

Encontré lo que creo que es un error en el comando chownen OS X 11.6. Parece funcionar de manera contraria a su página de manual, ignorando la -fbandera.

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?

@macetw, usted dijo: " De acuerdo con la página de manual, usando -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 para chownmacOS!
La opción f es una extensión del estándar POSIX y no debe considerarse portátil.
Las percepciones son diferentes. Como usuario de Linux desde hace mucho tiempo, espero que "-f" sea la forma estándar de "forzar la acción a realizar y no se quejen de ello". Este comportamiento es cierto (en Linux) sobre "rm", "mv", "cp", etc. Específicamente con "rm", hago esto todo el tiempo, para que el archivo no exista. Mi pregunta del título aún está abierta: si quiero mejorar la experiencia del shell de comandos en Mac, ¿dónde documento mi error/sugerencia?
Su pregunta se responde en los comentarios sobre la respuesta a continuación. Recientemente pensé en su queja cuando experimenté un "problema" de diseño similar (por no decir "error"): estaba cambiando entre aplicaciones y un atajo de teclado correspondía a diferentes comandos en cada aplicación. Esto fue frustrante al principio, pero la solución más fácil fue aprender los atajos de teclado relevantes en cada aplicación. Si no se especifica un comportamiento idéntico en un estándar común como POSIX , no se puede esperar, como dijo @fd0.

Respuestas (1)

No es un error, es una documentación mal escrita. La -f opción para chownlos 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 rooto 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}testfilerootrootsudo

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 rooty no usando sudo, lo cual es necesario para cambiar el dueño de un archivo a root.


Tenga en cuenta que cada sistema operativo chownno 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 chownlos 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 -fhace con chownLinux Mint es tan detallada y explícita como en macOS.

Entonces, mientras esté en Linux Mint, no como rooto usando sudo, chown -f root non_existant_filenameno generará un error, sin embargo, su código de salida es 1, no 0como en el chownejemplo anterior de macOS usando -fdentro de su contexto definido.

Las percepciones son diferentes. Como usuario de Linux desde hace mucho tiempo, espero que "-f" sea la forma estándar de "forzar la acción a realizar y no se quejen de ello". Este comportamiento es cierto (en Linux) sobre "rm", "mv", "cp", etc. Específicamente con "rm", hago esto todo el tiempo, para que el archivo no exista. Mi pregunta del título aún está abierta: si quiero mejorar la experiencia del shell de comandos en Mac, ¿dónde documento mi error/sugerencia?
@macetw Esta respuesta argumenta de manera convincente que no es un error. Su contraargumento parece conceder que no se trata de un error, por lo que tal vez debería cambiar la palabra "error" en la pregunta por algo así como "defecto de diseño", en cuyo caso está buscando un lugar para discutir la lógica de diseño de varias funciones . ? Para obtener información sobre informes de errores, consulte, por ejemplo, developer.apple.com/bug-reporting y freebsd.org/support/bugreports.html
@macetw, yo también soy un usuario de Linux desde hace mucho tiempo, sin embargo, el hecho de que seamos usuarios de Linux desde hace mucho tiempo es totalmente irrelevante porque macOS no es Linux y, como ya se dijo, la -fopció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 -fopción no es realmente necesaria con un único comando emitido en la línea de comando. Continúa en el siguiente comentario.
@macetw, entonces, en un script, por ejemplo, chown root nonexistant_filename 2>/dev/nullocultará la chown: nonexistant_filename: No such file or directorysalida 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.
@macetw Eche un vistazo a opensource.apple.com/source/file_cmds/file_cmds-264.50.1/chown/… : Las ftsfunciones se usan para atravesar la jerarquía de archivos, la falla en statun 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, mvetc., pero muchos binarios de Unix no lo son ( awkpor ejemplo, se usa -fpara pasar un archivo de script).