Non è un bug, è una documentazione scritta male. L' -f
opzione per gli chown
stati:
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 root
o 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}testfile
a root
, mentre in corso di esecuzione non così root
e 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 root
e non si usa sudo
, che è necessario cambiare il proprietario di un file di a root
.
Si noti che ciascun sistema operativo chown
non è 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 chown
stati:
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 -f
accade con chown
Linux Mint è dettagliata ed esplicita come in macOS.
Quindi, mentre in Linux Mint, non come root
o usando sudo
, chown -f root non_existant_filename
non genererà un errore, tuttavia, il suo codice di uscita è 1
, non 0
come è chown
nell'esempio macOS sopra usando -f
nel suo contesto definito.
-f
, dovrebbe ignorare che il file non esiste né dovrebbe cambiare il valore di ritorno. " e questo non è affatto ciò chechown
afferma la pagina man sotto macOS!