W katalogu głównym mojego dysku flash USB, czasami po uruchomieniu ls
, wyjście jest normalne i zawiera listę plików. W innych przypadkach dane wyjściowe są po prostu jednym wierszem:
$ ls
.
Jeśli spróbuję ls -la
w którymś z tych przypadków, otrzymam to:
$ ls -la
ls: .: Invalid argument
Jeśli ls
kilkakrotnie biegnę od siebie do siebie, wydaje się, że zwraca albo normalne, albo nienormalne wyjście w zasadzie losowo.
ls
wydaje się działać normalnie w innych katalogach. ls $drivename
nawet wydaje się działać dobrze z katalogu nadrzędnego i ls ..
wydaje się działać dobrze z katalogu podrzędnego. (Chociaż nie mogę być w 100% pewien tych, które „działają normalnie”, ponieważ na początku zachowanie jest nieokreślone). Wypróbowałem dwa inne zewnętrzne dyski USB i uzyskałem to samo zachowanie.
Co tu się dzieje? Korzystam z systemu Mac OS X 10.11.3.
Edycja: Niezły pomysł, ale chyba nie używam aliasu i /bin/ls
daje ten sam rezultat.
/bin/ls
?/bin/ls
daje ten sam rezultat, czasami generując.
.ls
wydaje się działać normalnie w innych katalogach.ls NO\ NAME
nawet wydaje się działać dobrze z katalogu nadrzędnego ils ..
wydaje się działać dobrze z katalogu podrzędnego. (Chociaż nie mogę być w 100% pewien tych, które „działają normalnie”, ponieważ na początku zachowanie jest nieokreślone.)ls
używasz?/bin/ls --version
powinien działaćOdpowiedzi:
Może to być błąd w sterowniku systemu plików FAT32 w najnowszych wersjach OSX. Dzieje się tak również wtedy, gdy katalog roboczy znajduje się w katalogu głównym podłączonego dysku. Jeśli znajduje się w podkatalogu lub gdziekolwiek indziej w systemie, wydaje się, że wszystko działa.
W tym wątku jest kilka interesujących dyskusji, w tym ślady systemowe. https://github.com/robbyrussell/oh-my-zsh/issues/4161
źródło
Obejście problemu: (prawdopodobnie część tego, co pytający doceniłby, nawet gdyby nie poprosił o to specjalnie)
Zapoznaj się z bieżącym katalogiem prawie w jakikolwiek inny sposób niż
.
. Przykład:cd
do podkatalogu, a następnie uruchomls
katalog macierzysty. Oznacza to, że wpisz coś takiego:mkdir S; cd S ; /bin/ls -al ..
Lub odwołaj się do niego, podając pełną nazwę ścieżki. Przykład:
ls /Volumes/microSD007
Dla mnie jedno z tych obejść działa (oznacza to, że dają oczekiwany wynik), gdy
ls
daje mi to samo błędne wyjście, które zgłosił OP. (A dla mnie nie ma wyjścia w dmesg, gdyls
działa dziwnie.)Widzę te same awarie w wersji 10.12.6 w Terminal.app podczas uruchamiania bash. Samo w
csh
ish
, nawet po ustawieniu TERM na vt100. To obejście działa również w tych powłokach.I zgadzam się, że jest błąd
stat64
, jak wskazano wzsh
wątku, na który wskazuje Neil. (Myślałem, że problem jest spowodowany wadliwą i / lub fałszywą pamięcią flash, i nadal zastanawiam się, czy to czasem jest czynnik).Zauważyłem, że ten błąd wpływa również na:
ls
ils
gdy jest używany w trybie powłoki Emacsa.źródło
Jeśli czasami wyjmujesz dysk, odpowiedź brzmi: za każdym razem, gdy ponownie włożysz dysk, musisz wrócić do katalogu za pomocą cd. Wynika to z faktu, że deskryptor pliku otwarty przez powłokę w celu odczytania katalogu jest unieważniany po usunięciu dysku i nie jest ponownie inicjowany automatycznie po ponownym włożeniu dysku (nawet jeśli dysk był używany w innym terminalu lub menedżerze plików).
Jeśli dysk nigdy nie zostanie usunięty, przyczyną może być problem sprzętowy lub oprogramowanie, które z jakiegoś powodu odmontowuje dysk; powinieneś dostarczyć logi systemowe.
źródło