Mengapa "ls" secara sporadis hanya menghasilkan "." di direktori root drive eksternal?

9

Di direktori root USB flash drive saya, kadang-kadang ketika saya menjalankan ls, hasilnya normal dan daftar file. Di lain waktu, output hanyalah satu baris:

$ ls
.

Jika saya mencoba ls -ladi salah satu waktu itu, saya mendapatkan ini:

$ ls -la
ls: .: Invalid argument

Jika saya menjalankan lsback to back beberapa kali, sepertinya mengembalikan output normal atau abnormal pada dasarnya secara acak.

lstampaknya berfungsi normal di direktori lain. ls $drivenamebahkan tampaknya berfungsi dengan baik dari direktori induk, dan ls ..tampaknya berfungsi dengan baik dari direktori anak. (Meskipun saya tidak dapat 100% yakin dengan yang "bekerja secara normal" karena perilaku tersebut tidak dapat ditentukan sejak awal.) Saya mencoba dua drive USB eksternal lain dan mendapatkan perilaku yang sama.

Apa yang terjadi di sini? Saya menggunakan Mac OS X 10.11.3.

Sunting: Ide bagus, tapi sepertinya saya tidak menggunakan alias, dan /bin/lsmemberikan hasil yang sama.

leekaiinthesky
sumber
2
Perilaku yang tidak biasa ini mungkin hasil dari alias yang tidak berfungsi. Apa yang terjadi jika Anda menggunakan /bin/ls?
DopeGhoti
apakah ini bekerja dengan baik di direktori lain?
Liam
/bin/lsmemberikan hasil yang sama, terkadang menghasilkan .. lstampaknya berfungsi normal di direktori lain. ls NO\ NAMEbahkan tampaknya berfungsi dengan baik dari direktori induk, dan ls ..tampaknya berfungsi dengan baik dari direktori anak. (Meskipun saya tidak dapat 100% yakin dengan orang-orang yang "bekerja secara normal" karena perilaku tersebut tidak dapat ditentukan sejak awal.)
leekaiinthesky
Sistem file apa yang Anda gunakan di flash drive itu? Mungkin ada beberapa anomali yang berasal dari sistem file berbasis windows
RSFalcon7
Versi apa lsyang Anda gunakan? /bin/ls --versionharus bekerja
RSFalcon7

Jawaban:

6

Mungkin ada bug di driver filesystem untuk FAT32 pada versi OSX terbaru. Ini juga hanya tampak terjadi ketika direktori kerja berada pada akar dari drive yang dipasang. Jika berada di subdirektori atau di mana pun pada sistem, sepertinya semuanya berfungsi.

Ada beberapa diskusi menarik di utas ini termasuk jejak sistem. https://github.com/robbyrussell/oh-my-zsh/issues/4161

Neil
sumber
2

WORKAROUND: (mungkin bagian dari apa yang dihargai penanya meskipun mereka tidak secara spesifik memintanya)

Rujuk ke direktori saat ini dengan cara apa pun selain .. Contoh:

cdke subdirektori, dan kemudian jalankan lsdi direktori induk. Yaitu, masukkan sesuatu seperti ini:

mkdir S; cd S ; /bin/ls -al ..

Atau lihat dengan nama path lengkapnya. Contoh:

ls /Volumes/microSD007

Bagi saya, salah satu dari solusi ini bekerja (yaitu, mereka menghasilkan output yang diharapkan) ketika lsmemberi saya output salah yang sama dengan yang dilaporkan OP. (Dan bagi saya, tidak ada output dalam dmesg ketika lsbertindak aneh.)

Saya melihat kerusakan yang sama pada 10.12.6 di Terminal.app menjalankan bash. Sama cshdan sh, bahkan setelah pengaturan TERM ke vt100. Penanganan masalah ini juga berhasil pada cangkang tersebut.

Dan saya setuju ada bug di dalamnya stat64, seperti yang ditunjukkan dalam zshutas masalah yang Neil tunjukkan. (Saya pikir masalah ini disebabkan oleh cacat dan / atau memori flash palsu, dan masih bertanya-tanya apakah itu faktor kadang-kadang.)

Saya perhatikan bahwa bug ini juga mempengaruhi:

  • Mode dirac Emacs, karena memanggil ls, dan
  • ls ketika digunakan dalam mode shell Emacs.
Matthew Elvey
sumber
2
Saya tidak mengerti mengapa Goro mengeditnya, dan tidak ada ringkasan edit yang disediakan. Saya pikir mereka membuat jawabannya lebih buruk, dan sekarang saya melihat itu menerima -1. Saya memberikan solusi, menghapus indikator 'solusi' saya membuatnya tampak seperti saya mengklaim / mencoba memberikan jawaban langsung. Saya pikir saya menawarkan lebih dari sekedar komentar, tetapi kurang dari sebuah jawaban. Bukankah itu harus didorong? Saya diidentifikasi baru; tidakkah ringkasan edit dan alasan -1 sesuai? Goro juga menghapus jawaban yang lebih pendek dan lebih baik yang saya tambahkan. Saya tidak mengerti.
Matthew Elvey
1
Saya di pagar; umumnya jawaban perlu menjawab pertanyaan, tidak hanya memberikan lebih banyak informasi, tetapi mengatasi masalah mungkin merupakan bagian dari apa yang dicari penanya walaupun mereka tidak secara khusus menyebutkannya. Sebagian besar pengeditan sepertinya tidak perlu, dan setidaknya satu pasti mengacaukan format, jadi saya gulung kembali. Saya tidak yakin apakah posting pernah mengalami downvote, tetapi saat ini ada 2 upvotes dan 0 downvotes
Michael Mrozek
0

Jika Anda kadang-kadang menghapus drive, maka jawabannya adalah setiap kali Anda memasukkan kembali drive, Anda harus kembali ke direktori menggunakan cd. Ini karena deskriptor file yang dibuka oleh shell Anda untuk membaca direktori tidak valid ketika drive dihapus, dan tidak diinisialisasi ulang secara otomatis ketika drive dimasukkan kembali (walaupun Anda mungkin telah menggunakan drive di terminal atau file manager lain).

Jika drive tidak pernah dihapus, maka mungkin ada masalah perangkat keras atau mungkin beberapa perangkat lunak yang melepas drive karena suatu alasan; Anda harus memberikan log sistem.

Hukum29
sumber