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 -la
di salah satu waktu itu, saya mendapatkan ini:
$ ls -la
ls: .: Invalid argument
Jika saya menjalankan ls
back to back beberapa kali, sepertinya mengembalikan output normal atau abnormal pada dasarnya secara acak.
ls
tampaknya berfungsi normal di direktori lain. ls $drivename
bahkan 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/ls
memberikan hasil yang sama.
/bin/ls
?/bin/ls
memberikan hasil yang sama, terkadang menghasilkan.
.ls
tampaknya berfungsi normal di direktori lain.ls NO\ NAME
bahkan tampaknya berfungsi dengan baik dari direktori induk, danls ..
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.)ls
yang Anda gunakan?/bin/ls --version
harus bekerjaJawaban:
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
sumber
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:cd
ke subdirektori, dan kemudian jalankanls
di 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
ls
memberi saya output salah yang sama dengan yang dilaporkan OP. (Dan bagi saya, tidak ada output dalam dmesg ketikals
bertindak aneh.)Saya melihat kerusakan yang sama pada 10.12.6 di Terminal.app menjalankan bash. Sama
csh
dansh
, 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 dalamzsh
utas 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:
ls
, danls
ketika digunakan dalam mode shell Emacs.sumber
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.
sumber