Non è un bug, è una documentazione mal scritta. L'opzione -f
per chown
afferma:
Don't report any failure to change file owner or group, nor modify the exit status to reflect such failures.
Questo significa che l'opzione -f
è applicabile solo se il file di destinazione esiste e c'è stato un errore nel cambiare il proprietario o < em> gruppo del file , che ovviamente non è possibile eseguire su un file non esistente come nell'esempio OP sotto macOS.
Per mostrare che l'opzione -f
funziona 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'opzione -f
fallisce, si chiude > 0, perché il comando chown
sta cercando di impostare proprietario di ${TMPDIR}testfile
a root
mentre viene eseguito non come root
e non usando sudo
.
Ora esegui con l'opzione -f
:
touch ${TMPDIR}testfile; chown -f root ${TMPDIR}testfile; echo $?; rm ${TMPDIR}testfile
L'output sarà:
0
In questo secondo modulo, con l'opzione -f
, ha successo, esce con 0 senza aver apportato alcuna modifica, perché non è stato eseguito come root
e non utilizzando sudo
, che è necessario per cambiare il proprietario di un file in root
.
Si noti che ogni OS% chown
non è uguale in tutte le funzionalità l'un l'altro. In altre parole, anche se non ho Red Hat, come menzionato nell'OP, ho Linux Mint da confrontare, e la pagina man in Linux Mint -f
opzione per chown
afferma:
suppress most error messages
Come vedi più è la parola chiave, quindi non elimina i tutti messaggi di errore in Linux Mint né la descrizione di cosa -f
fa con chown
sotto Linux Mint come dettagliato ed esplicito come in macOS.
Quindi, mentre in Linux Mint, non come root
o usando sudo
, chown -f root non_existant_filename
non produrrà un errore, tuttavia, il suo codice di uscita è 1
, non 0
com'è con macOS% esempio dichown
sopra usando -f
all'interno del suo contesto definito.