Ce n'est pas un bug, c'est une documentation mal écrite. Le site -f
option pour chown
États :
Ne signalez pas les échecs de changement de propriétaire ou de groupe de fichiers, et ne modifiez pas l'état de sortie pour refléter ces échecs.
Cela signifie que le -f
option n'est applicable que si la cible fichier existe et il y a eu une erreur dans la modification de la propriétaire o groupe de la fichier ce que, bien sûr, vous ne pouvez pas faire sur une inexistante. fichier comme dans l'exemple du PO sous MacOS.
Pour montrer que le -f
option fonctionne effectivement comme prévu, utilisez les éléments suivants commandement composé dans le terminal tout en ne le faisant pas comme root
ou en utilisant sudo
:
touch ${TMPDIR}testfile; chown root ${TMPDIR}testfile; echo $?; rm ${TMPDIR}testfile
La sortie sera, par exemple, la suivante :
chown: /var/folders/7l/lcvbc47n3sd7jcztdhc9c_pw0000gn/T/testfile: Operation not permitted
1
Dans cette première forme, sans le -f
option il échoue, exits >0, parce que les chown
commande essaie de définir le propriétaire de ${TMPDIR}testfile
à root
tout en étant exécuté non pas comme root
et ne pas utiliser sudo
.
Maintenant, exécutez avec le -f
option :
touch ${TMPDIR}testfile; chown -f root ${TMPDIR}testfile; echo $?; rm ${TMPDIR}testfile
La sortie sera :
0
Dans cette deuxième forme, avec le -f
option si elle réussit, elle sort avec 0 sans avoir fait aucun changement, car elle n'a pas été faite de la manière suivante root
et ne pas utiliser sudo
ce qui est nécessaire pour modifier le propriétaire d'un fichier à root
.
Notez que chaque OSes chown
n'est pas égal à l'autre dans toutes ses fonctionnalités. En d'autres termes, bien que je n'aie pas Red Hat, comme mentionné dans l'OP, j'ai Linux Mint à comparer, et la page de manuel de Linux Mint -f
option pour chown
États :
supprimer la plupart des messages d'erreur
Comme vous le voyez le plus est le mot-clé, donc il ne supprime pas tous messages d'erreur dans Linux Mint, ni la description de ce que les -f
fait avec chown
sous Linux Mint aussi détaillée et explicite que sous MacOS.
Alors que dans Linux Mint, pas comme root
ou en utilisant sudo
, chown -f root non_existant_filename
ne produira pas d'erreur, cependant, son code de sortie est 1
pas 0
comme c'est le cas avec le système MacOS chown
exemple ci-dessus en utilisant -f
dans son contexte défini.
1 votes
@macetw, Vous avez dit, " Selon la page de manuel, l'utilisation de
-f
il doit ignorer que le fichier n'existe pas et ne doit pas modifier la valeur de retour. "et ce n'est pas du tout ce que dit la page de manuel dechown
sous MacOS !1 votes
L'option f est une extension de la norme POSIX et ne doit pas être considérée comme portable.
0 votes
Les perceptions sont différentes. En tant qu'utilisateur de longue date de Linux, je m'attends à ce que "-f" soit le moyen standard de "forcer l'exécution de l'action et de ne pas m'en plaindre". Ce comportement est vrai (sous Linux) pour "rm", "mv", "cp", etc. En particulier avec "rm", je fais cela tout le temps, que le fichier pourrait ne pas exister. La question que j'ai posée dans le titre reste ouverte : Si je veux améliorer l'expérience du shell de commande sur Mac, où dois-je documenter mon bug/suggestion ?
1 votes
La réponse à votre question se trouve dans les commentaires de la réponse ci-dessous. J'ai récemment pensé à votre plainte lorsque j'ai rencontré un "problème" de conception similaire (pour ne pas dire un "bug") : Je passais d'une application à l'autre et un raccourci clavier correspondent à des commandes différentes dans chaque application. C'était frustrant au début, mais la solution la plus simple était d'apprendre les raccourcis clavier appropriés dans chaque application. Si un comportement identique n'est pas spécifié dans une norme commune telle que POSIX mais il ne faut pas s'attendre à ce que ce soit le cas, comme l'a dit @fd0.