Fehler in BSD: Wem soll ich ihn melden?

Ich habe einen Fehler im Befehl chownvon OS X 11.6 gefunden. Es scheint entgegen seiner Manpage zu funktionieren und das -fFlag zu ignorieren.

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

Laut der Manpage -fsollte bei Verwendung von ignoriert werden, dass die Datei nicht existiert, und der Rückgabewert nicht geändert werden. (Zum Vergleich habe ich das korrekte Verhalten auf RedHat 6 getestet.)

Ich bin mir nicht sicher, wer (wenn irgendjemand) diese Art von Fehlern beheben würde. Die Manpage bezieht sich auf BSD. Gibt es ein aktives Projekt, das solche Dinge unterstützt?

@macetw, Sie sagten: " Laut der Manpage -fsollte mit , ignoriert werden, dass die Datei nicht existiert, und der Rückgabewert nicht geändert werden. " Und das ist überhaupt nicht das, was die Manpage chownunter macOS angibt!
Die Option f ist eine Erweiterung des POSIX-Standards und sollte nicht als portierbar angesehen werden.
Wahrnehmungen sind unterschiedlich. Als langjähriger Linux-Benutzer erwarte ich, dass "-f" der Standardweg ist, um "die Aktion zu erzwingen und sich nicht bei mir darüber zu beschweren". Dieses Verhalten gilt (unter Linux) für „rm“, „mv“, „cp“ und so weiter. Speziell mit "rm" mache ich das die ganze Zeit, dass die Datei möglicherweise nicht existiert. Meine Frage aus dem Titel ist noch offen: Wenn ich die Command-Shell-Erfahrung auf dem Mac verbessern möchte, wo dokumentiere ich meinen Fehler/Vorschlag?
Ihre Frage wird in den Kommentaren zur Antwort unten beantwortet. Kürzlich dachte ich an Ihre Beschwerde, als ich ein ähnliches „Designproblem“ (um nicht zu sagen „Bug“) hatte: Ich wechselte zwischen Anwendungen und eine Tastenkombination entsprach verschiedenen Befehlen in jeder App. Das war zunächst frustrierend, aber die einfachste Lösung bestand darin, die entsprechenden Tastenkombinationen in jeder App zu lernen. Wenn identisches Verhalten nicht in einem gemeinsamen Standard wie POSIX angegeben ist , kann es nicht erwartet werden, wie @fd0 sagte.

Antworten (1)

Es ist kein Fehler, es ist eine schlecht geschriebene Dokumentation. Die -f Option für chownStaaten:

Melden Sie keinen Fehler beim Ändern des Dateieigentümers oder der Gruppe, und ändern Sie auch nicht den Exit-Status, um solche Fehler widerzuspiegeln.

Dies bedeutet, dass die -f Option nur anwendbar ist, wenn die Zieldatei vorhanden ist und beim Ändern des Eigentümers oder der Gruppe der Datei ein Fehler aufgetreten ist , was Sie natürlich nicht für eine nicht vorhandene Datei wie im OP-Beispiel unter macOS tun können.

Um zu zeigen, dass die -f Option tatsächlich wie beabsichtigt funktioniert, verwenden Sie den folgenden zusammengesetzten Befehl in Terminal, ohne dies mit rootoder zu tun sudo:

touch ${TMPDIR}testfile; chown root ${TMPDIR}testfile; echo $?; rm ${TMPDIR}testfile

Die Ausgabe wird zB sein:

chown: /var/folders/7l/lcvbc47n3sd7jcztdhc9c_pw0000gn/T/testfile: Operation not permitted
1

In dieser ersten Form, ohne die -f Option scheitert es, wird >0 beendet, da der chown Befehl versucht, den Besitzer von ${TMPDIR}testfileauf zu setzen root, während er nicht als ausgeführt wird rootund nicht verwendet wird sudo.

-f Jetzt mit der Option ausführen :

touch ${TMPDIR}testfile; chown -f root ${TMPDIR}testfile; echo $?; rm ${TMPDIR}testfile

Die Ausgabe wird sein:

0

In dieser zweiten Form, mit der -f Option , es gelingt, wird mit 0 beendet, ohne eine Änderung vorgenommen zu haben, weil es nicht als rootund ohne Verwendung von getan wurde sudo, was notwendig ist, um den Eigentümer einer Datei in zu ändern root.


Beachten Sie, dass die einzelnen Betriebssysteme chownnicht in allen Funktionen gleich sind. Mit anderen Worten, obwohl ich Red Hat nicht habe, wie im OP erwähnt, habe ich Linux Mint zum Vergleichen, und die Manpage in Linux Mint gibt folgende -f Optionchown an :

die meisten Fehlermeldungen unterdrücken

Wie Sie sehen , ist das Schlüsselwort am meisten , es unterdrückt also nicht alle Fehlermeldungen in Linux Mint, noch ist die Beschreibung, was -fmit unter Linux Mint passiert chown, so detailliert und explizit wie unter macOS.

Während also in Linux Mint nicht as rootoder using sudo, chown -f root non_existant_filenamekeinen Fehler ausgibt, ist sein Exit-Code jedoch 1, nicht 0wie im chownobigen macOS-Beispiel, -fdas innerhalb seines definierten Kontexts verwendet wird.

Wahrnehmungen sind unterschiedlich. Als langjähriger Linux-Benutzer erwarte ich, dass "-f" der Standardweg ist, um "die Aktion zu erzwingen und sich nicht bei mir darüber zu beschweren". Dieses Verhalten gilt (unter Linux) für „rm“, „mv“, „cp“ und so weiter. Speziell mit "rm" mache ich das die ganze Zeit, dass die Datei möglicherweise nicht existiert. Meine Frage aus dem Titel ist noch offen: Wenn ich die Command-Shell-Erfahrung auf dem Mac verbessern möchte, wo dokumentiere ich meinen Fehler/Vorschlag?
@macetw, ich bin auch ein langjähriger Linux-Benutzer, aber die Tatsache, dass wir langjährige Linux-Benutzer sind, ist völlig irrelevant, da macOS nicht Linux ist und wie bereits erwähnt, die -fOption zwischen Betriebssystemplattformen und / oder Versionen von nicht gleich ist chown. Ich glaube, mein Test bestätigt, dass es unter macOS wie vorgesehen funktioniert. Allerdings gibt es andere Möglichkeiten zu codieren, um unerwünschte Ausgaben zu vermeiden. Ich gehe davon aus, dass Ihr Skript etwas enthält, in dem nur eine saubere Ausgabe angezeigt werden soll, da die -fOption nicht wirklich benötigt wird, wenn ein einziger einmaliger Befehl auf der Befehlszeile ausgegeben wird. Fortsetzung im nächsten Kommentar.
@macetw, also in einem Skript wird zB die Fehlerausgabe chown root nonexistant_filename 2>/dev/nullausgeblendet . chown: nonexistant_filename: No such file or directoryAuch in Skripten gibt es einfache Möglichkeiten, um zu bestätigen, dass die Datei existiert, bevor Sie versuchen, darauf zu reagieren (und sollten dies wahrscheinlich in vielen Fällen tun). Wenn Sie dies jedoch wirklich als Fehler und / oder Designfehler verfolgen möchten, enthält der obige Kommentar von Big Mac einige Links, um dies zu erleichtern.
@macetw Werfen Sie einen Blick auf opensource.apple.com/source/file_cmds/file_cmds-264.50.1/chown/… : Die ftsFunktionen werden verwendet, um die Dateihierarchie zu durchlaufen, ein Fehler bei stateiner Datei führt zur Anzeige einer Warnung (suchen Sie nach FTS_ERR). Das Verhalten ist also definitiv beabsichtigt. Man könnte argumentieren, dass es nicht mit cp, mvusw. konsistent ist, aber viele Unix-Binärdateien sind es nicht ( awkz. B. verwendet -f, um eine Skriptdatei zu übergeben).