Non è un bug, è una documentazione scritta male. L' -f opzione per gli chownstati:
Non segnalare alcun errore nel cambiare il proprietario o il gruppo del file, né modificare lo stato di uscita per riflettere tali errori.
Ciò significa che l' -f opzione è applicabile solo se esiste il file di destinazione e si è verificato un errore durante la modifica del proprietario o del gruppo del file , cosa che ovviamente non è possibile eseguire su un file inesistente come nell'esempio OP in macOS.
Per mostrare che l' -f opzione funziona effettivamente come previsto, usa il seguente comando composto in Terminale mentre non lo fai come rooto usando sudo:
touch ${TMPDIR}testfile; chown root ${TMPDIR}testfile; echo $?; rm ${TMPDIR}testfile
L'output sarà, ad esempio:
chown: /var/folders/7l/lcvbc47n3sd7jcztdhc9c_pw0000gn/T/testfile: Operation not permitted
1
In questa prima forma, senza l' -f opzione non riesce, esce> 0, perché il chown comando di sta cercando di impostare il proprietario di ${TMPDIR}testfilea root, mentre in corso di esecuzione non così roote che non utilizzano sudo.
Ora esegui con l' -f opzione :
touch ${TMPDIR}testfile; chown -f root ${TMPDIR}testfile; echo $?; rm ${TMPDIR}testfile
L'output sarà:
0
In questa seconda forma, con l' -f opzione di , riesce, esce con 0 senza aver fatto alcun cambiamento, perché è stato fatto non come roote non si usa sudo, che è necessario cambiare il proprietario di un file di a root.
Si noti che ciascun sistema operativo chownnon è uguale in tutte le funzionalità tra loro. In altre parole, anche se non ho Red Hat, come menzionato nell'OP, ho Linux Mint da confrontare e la pagina man -f nell'opzione Linux Mint per gli chownstati:
sopprime la maggior parte dei messaggi di errore
Come vedi di più è la parola chiave, quindi non sopprime tutti i messaggi di errore in Linux Mint né la descrizione di ciò che -faccade con chownLinux Mint è dettagliata ed esplicita come in macOS.
Quindi, mentre in Linux Mint, non come rooto usando sudo, chown -f root non_existant_filenamenon genererà un errore, tuttavia, il suo codice di uscita è 1, non 0come è chownnell'esempio macOS sopra usando -fnel suo contesto definito.
-f, dovrebbe ignorare che il file non esiste né dovrebbe cambiare il valore di ritorno. " e questo non è affatto ciò chechownafferma la pagina man sotto macOS!