在我的U盘根目录下,有时运行时ls
,输出正常,并列出了文件。在其他时候,输出只是一行:
$ ls
.
如果我尝试ls -la
其中一个时间,我会得到以下结果:
$ ls -la
ls: .: Invalid argument
如果我ls
连续运行多次,它似乎基本上随机返回正常输出或异常输出。
ls
在其他目录中似乎可以正常工作。ls $drivename
甚至在父目录中似乎工作正常,并且ls ..
在子目录中似乎工作正常。 (虽然我不能 100% 确定那些“正常工作”,因为行为一开始就不确定。)我尝试了另外两个外部 USB 驱动器并得到了相同的行为。
这里发生了什么?我使用的是 Mac OS X 10.11.3。
编辑:好主意,但我似乎没有使用别名,并/bin/ls
给出了相同的结果。
答案1
这可能是最新版本 OSX 上 FAT32 文件系统驱动程序中的错误。这也仅当工作目录位于已安装驱动器的根目录时才会发生。如果它位于子目录或系统上的其他任何位置,则一切似乎都可以正常工作。
该线程中有一些有趣的讨论,包括系统跟踪。 https://github.com/robbyrussell/oh-my-zsh/issues/4161
答案2
解决方法:(即使提问者没有特别要求,这可能也是提问者会欣赏的部分)
除了 . 之外,几乎可以用任何方式引用当前目录.
。例子:
cd
到子目录,然后ls
在父目录上运行。也就是说,输入如下内容:
mkdir S; cd S ; /bin/ls -al ..
或者通过它的完整路径名引用它。例子:
ls /Volumes/microSD007
ls
对我来说,当给我OP报告的相同错误输出时,这些解决方法都有效(也就是说,它们会产生预期的输出) 。 (对我来说,当ls
行为异常时 dmesg 中没有输出。)
我在 10.12.6 上运行 bash 的 Terminal.app 中看到同样的故障。csh
和中相同sh
,即使将 TERM 设置为 vt100 后也是如此。此解决方法也适用于这些 shell。
我同意 中存在一个错误stat64
,正如zsh
Neil 向我们指出的问题线程中所指出的那样。 (我曾认为该问题是由有缺陷和/或假闪存引起的,有时仍然想知道这是否是一个因素。)
我注意到这个错误也会影响:
- Emacs 的 dired 模式,因为它调用
ls
, 和 ls
当它在 Emacs 的 shell 模式下使用时。
答案3
如果您有时删除驱动器,那么答案是每次重新插入驱动器时,都必须使用 cd 返回到该目录。这是因为当驱动器被移除时,由 shell 打开的用于读取目录的文件描述符将失效,并且在重新插入驱动器时不会自动重新初始化(即使您可能已在另一个终端或文件管理器中使用了该驱动器)。
如果驱动器从未被移除,则可能是硬件问题,或者可能是某些软件出于某种原因卸载了驱动器;您应该提供系统日志。