В корневом каталоге моего флэш-накопителя USB иногда при запуске ls
выводится нормально и в нем перечислены файлы. В других случаях вывод - это просто одна строка:
$ ls
.
Если я попробую ls -la
в один из тех случаев, я получу это:
$ ls -la
ls: .: Invalid argument
Если я бегу ls
туда-сюда несколько раз, кажется, что он возвращает либо нормальный выходной сигнал, либо ненормальный выходной сигнал в основном случайным образом.
ls
кажется, работает нормально в других каталогах. ls $drivename
даже кажется, что работает нормально из родительского каталога, и, ls ..
кажется, работает нормально из дочернего каталога. (Хотя я не могу быть на 100% уверен в тех, которые «работают нормально», поскольку поведение с самого начала неопределенное.) Я попробовал два других внешних USB-накопителя и получил то же самое поведение.
Что тут происходит? Я на Mac OS X 10.11.3.
Изменить: хорошая идея, но я, кажется, не использую псевдоним, и /bin/ls
дает тот же результат.
/bin/ls
?/bin/ls
дает тот же результат, иногда вывод.
.ls
кажется, работает нормально в других каталогах.ls NO\ NAME
даже кажется, что работает нормально из родительского каталога, и,ls ..
кажется, работает нормально из дочернего каталога. (Хотя я не могу быть на 100% уверен в тех, кто «работает нормально», так как поведение неопределенно с самого начала.)ls
вы используете?/bin/ls --version
должен работатьОтветы:
Это может быть ошибка в драйвере файловой системы для FAT32 в последних версиях OSX. Это также происходит только в том случае, если рабочий каталог находится в корне подключенного диска. Если это находится в подкаталоге или где-либо еще в системе, вещи, кажется, работают.
В этой теме есть интересное обсуждение, включая системные следы. https://github.com/robbyrussell/oh-my-zsh/issues/4161
источник
ВОЗМОЖНОЕ РЕШЕНИЕ: (вероятно, это было бы частью того, что просил бы спрашивающий, даже если бы он специально не просил об этом)
Обратитесь к текущему каталогу почти любым способом, кроме
.
. Пример:cd
в подкаталог, а затем запуститеls
в родительском каталоге. То есть введите что-то вроде этого:mkdir S; cd S ; /bin/ls -al ..
Или обратитесь к нему по полному пути. Пример:
ls /Volumes/microSD007
Для меня любой из этих обходных путей работает (то есть, они приводят к ожидаемому результату), когда
ls
дает мне тот же неправильный вывод, о котором сообщил OP. (И для меня нет вывода в dmesg, когдаls
действует странно.)Я наблюдаю те же неисправности на 10.12.6 в Terminal.app под управлением bash. То же самое
csh
иsh
, даже после установки TERM на vt100. Этот обходной путь работает и в этих оболочках.И я согласен, что в баге есть ошибка
stat64
, на которую указываетzsh
Нил. (Я думал, что проблема была вызвана некорректной и / или фальшивой флэш-памятью, и все еще удивляюсь, иногда ли это так.)Я заметил, что эта ошибка также влияет на:
ls
, иls
когда он используется в режиме оболочки Emacs.источник
Если вы иногда удаляете диск, то ответ таков: каждый раз, когда вы снова вставляете диск, вы должны возвращаться в каталог с помощью cd. Это связано с тем, что дескриптор файла, открытый вашей оболочкой для чтения каталога, становится недействительным при извлечении диска и не инициализируется автоматически при повторной установке диска (даже если вы использовали диск в другом терминале или файловом менеджере).
Если диск никогда не удаляется, то это может быть аппаратная проблема или, возможно, какое-то программное обеспечение, которое по какой-то причине отключает диск; Вы должны предоставить системные журналы.
источник