Im Stammverzeichnis meines USB-Sticks ls
ist die Ausgabe manchmal normal und listet die Dateien auf. Zu anderen Zeiten ist die Ausgabe einfach eine Zeile:
$ ls
.
Wenn ich es einmal versuche ls -la
, bekomme ich folgendes:
$ ls -la
ls: .: Invalid argument
Wenn ich ls
mehrmals hintereinander laufe , scheint es entweder die normale Ausgabe oder die abnormale Ausgabe im Grunde zufällig zurückzugeben.
ls
scheint in anderen Verzeichnissen normal zu funktionieren. ls $drivename
scheint sogar gut aus dem übergeordneten Verzeichnis ls ..
zu funktionieren , und scheint gut aus einem untergeordneten Verzeichnis zu funktionieren. (Obwohl ich nicht 100% sicher sein kann, welche "normal funktionieren", da das Verhalten zunächst unbestimmt ist.) Ich habe zwei andere externe USB-Laufwerke ausprobiert und das gleiche Verhalten festgestellt.
Was ist hier los? Ich bin unter Mac OS X 10.11.3.
Bearbeiten: Gute Idee, aber ich scheine keinen Alias zu verwenden und /bin/ls
gebe das gleiche Ergebnis.
/bin/ls
?/bin/ls
gibt das gleiche Ergebnis, manchmal Ausgabe.
.ls
scheint in anderen Verzeichnissen normal zu funktionieren.ls NO\ NAME
scheint sogar gut aus dem übergeordneten Verzeichnisls ..
zu funktionieren , und scheint gut aus einem untergeordneten Verzeichnis zu funktionieren. (Obwohl ich nicht 100% sicher sein kann, welche "normal funktionieren", da das Verhalten zunächst unbestimmt ist.)ls
Sie?/bin/ls --version
sollte funktionierenAntworten:
Möglicherweise liegt ein Fehler im Dateisystemtreiber für FAT32 in neueren OSX-Versionen vor. Dies scheint auch nur dann aufzutreten, wenn sich das Arbeitsverzeichnis im Stammverzeichnis des bereitgestellten Laufwerks befindet. Wenn es sich in einem Unterverzeichnis oder irgendwo anders im System befindet, scheinen die Dinge zu funktionieren.
In diesem Thread gibt es einige interessante Diskussionen, einschließlich Systemspuren. https://github.com/robbyrussell/oh-my-zsh/issues/4161
quelle
Umgehung: (wahrscheinlich ein Teil dessen, was der Fragesteller schätzen würde, selbst wenn er nicht speziell danach gefragt hätte)
Beziehen Sie sich auf fast jede andere Weise auf das aktuelle Verzeichnis als
.
. Beispiel:cd
in ein Unterverzeichnis und dannls
im übergeordneten Verzeichnis ausführen . Geben Sie also Folgendes ein:mkdir S; cd S ; /bin/ls -al ..
Oder beziehen Sie sich auf den vollständigen Pfadnamen. Beispiel:
ls /Volumes/microSD007
Für mich funktioniert jede dieser Problemumgehungen (dh sie führen zu der erwarteten Ausgabe), wenn
ls
ich dieselbe falsche Ausgabe erhalte, die das OP gemeldet hat. (Und für mich gibt es keine Ausgabe in dmesg, wenn esls
seltsam wirkt.)Ich sehe die gleichen Fehlfunktionen auf 10.12.6 in Terminal.app, das bash ausführt. Gleiches in
csh
undsh
auch nach dem Setzen von TERM auf vt100. Diese Problemumgehung funktioniert auch in diesen Shells.Und ich bin damit einverstanden, dass es einen Fehler gibt
stat64
, wie imzsh
Themen-Thread angegeben, auf den Neil uns hinweist. (Ich hatte gedacht, dass das Problem durch einen fehlerhaften und / oder gefälschten Flash-Speicher verursacht wurde, und mich immer noch gefragt, ob dies manchmal ein Faktor ist.)Mir ist aufgefallen, dass dieser Fehler auch Folgendes betrifft:
ls
, undls
wenn es im Emacs-Shell-Modus verwendet wird.quelle
Wenn Sie das Laufwerk manchmal entfernen, lautet die Antwort, dass Sie jedes Mal, wenn Sie das Laufwerk erneut einlegen, mit cd in das Verzeichnis zurückkehren müssen. Dies liegt daran, dass der von Ihrer Shell zum Lesen des Verzeichnisses geöffnete Dateideskriptor beim Entfernen des Laufwerks ungültig wird und beim erneuten Einsetzen des Laufwerks nicht automatisch neu initialisiert wird (obwohl Sie das Laufwerk möglicherweise in einem anderen Terminal oder Dateimanager verwendet haben).
Wenn das Laufwerk nie entfernt wird, liegt möglicherweise ein Hardwareproblem oder eine Software vor, die das Laufwerk aus irgendeinem Grund aushängt. Sie sollten die Systemprotokolle bereitstellen.
quelle