Bug in BSD: a chi devo segnalarlo?


3

Ho trovato quello che penso sia un bug nel comando chownin OS X 11.6. Sembra funzionare in contrasto con la sua pagina man, ignorando la -fbandiera.

T_MaceT 33 ) chown -f T_MaceT foo
chown: foo: No such file or directory
T_MaceT 34 ) echo $?
1

Secondo la pagina man, usando -f, dovrebbe ignorare che il file non esiste né dovrebbe cambiare il valore di ritorno. (Ho testato il comportamento corretto su RedHat 6 per il confronto.)

Non sono sicuro chi (se qualcuno) risolverà questo tipo di bug. La pagina man si riferisce a BSD. Esiste un progetto attivo a sostegno di questo tipo di cose?


1
@macetw, hai detto, " Secondo la pagina man, usando -f, dovrebbe ignorare che il file non esiste né dovrebbe cambiare il valore di ritorno. " e questo non è affatto ciò che chownafferma la pagina man sotto macOS!
user3439894,

1
L'opzione f è un'estensione dello standard POSIX e non deve essere considerata portatile.
fd0,

Le percezioni sono diverse. Come utente Linux di lunga data, mi aspetto che "-f" sia il modo standard per "forzare l'azione da eseguire e non lamentarmi con me". Questo comportamento è vero (in Linux) su "rm", "mv", "cp" e così via. In particolare con "rm", lo faccio sempre, affinché il file non esista. La mia domanda dal titolo è ancora aperta: se voglio migliorare l'esperienza della shell dei comandi su Mac, dove posso documentare il mio bug / suggerimento?
macetw,

1
Risposte alla tua domanda nei commenti sulla risposta di seguito. Di recente ho pensato al tuo reclamo quando ho riscontrato un "problema" di progettazione simile (per non dire "bug"): stavo passando da un'applicazione all'altra e una scorciatoia da tastiera corrispondeva a comandi diversi in ogni app. All'inizio questo è stato frustrante, ma la soluzione più semplice era imparare le scorciatoie da tastiera pertinenti in ogni app. Se un comportamento identico non è specificato in uno standard comune come POSIX , non ci si può aspettare, come ha detto @ fd0.
Big Mac

Risposte:


5

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.


1
Le percezioni sono diverse. Come utente Linux di lunga data, mi aspetto che "-f" sia il modo standard per "forzare l'azione da eseguire e non lamentarmi con me". Questo comportamento è vero (in Linux) su "rm", "mv", "cp" e così via. In particolare con "rm", lo faccio sempre, affinché il file non esista. La mia domanda dal titolo è ancora aperta: se voglio migliorare l'esperienza della shell dei comandi su Mac, dove posso documentare il mio bug / suggerimento?
macetw,

@macetw Questa risposta sostiene in modo convincente che non si tratta di un bug. Il tuo controargumento sembra ammettere che non si tratta di un bug, quindi forse dovresti cambiare la parola "bug" nella domanda in qualcosa di simile a "difetto di progettazione", nel qual caso stai cercando un posto per discutere la logica di progettazione di varie funzionalità ? Per informazioni sulla segnalazione di bug, vedi, ad esempio, developer.apple.com/bug-reporting e freebsd.org/support/bugreports.html
Big Mac

@macetw, anch'io sono un utente Linux da molto tempo, tuttavia il fatto che siamo utenti Linux da molto tempo è totalmente irrilevante perché macOS non è Linux e, come già detto, l' -fopzione non è uguale tra le piattaforme del sistema operativo e le versioni di chown. Credo che il mio test confermi che funziona come previsto in macOS. Detto questo, ci sono altri modi per codificare per evitare output indesiderati. Presumo che il tuo scripting sia qualcosa in cui desideri visualizzare solo un output pulito, poiché l' -fopzione non è realmente necessaria con un singolo comando una volta emesso sulla riga di comando. Continua nel prossimo commento.
user3439894,

2
@macetw, quindi, in uno script, ad esempio chown root nonexistant_filename 2>/dev/nullnasconderai l' chown: nonexistant_filename: No such file or directoryoutput dell'errore. Anche negli script ci sono modi semplici per confermare l'esistenza del file prima di tentare di agire su di esso (e probabilmente dovrebbe essere fatto in molti casi). Detto questo, se vuoi davvero perseguire questo come un bug e / o un difetto di progettazione, il commento fatto sopra da Big Mac contiene alcuni collegamenti per facilitare questo.
user3439894,

2
@macetw Dai un'occhiata a opensource.apple.com/source/file_cmds/file_cmds-264.50.1/chown/… : le ftsfunzioni vengono utilizzate per attraversare la gerarchia dei file, la mancata esecuzione di statun file comporterà la visualizzazione di un avviso (ricerca di FTS_ERR). Quindi il comportamento è definitivamente intenzionale. Si potrebbe sostenere che non è coerente con cp, mvecc., Ma molti binari Unix non lo sono ( awkad esempio utilizza -fper passare un file di script).
Nohillside
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.