为什么“ ls”偶尔会只输出“。” 在外部驱动器的根目录中?


9

在我的USB闪存驱动器的根目录中,有时当我运行时ls,输出是正常的,并且列出了文件。在其他时候,输出只是一行:

$ ls
.

如果我ls -la在其中一次尝试,我会得到:

$ ls -la
ls: .: Invalid argument

如果我ls多次背靠背跑,似乎基本上是随机返回正常输出或异常输出。

ls似乎在其他目录中正常工作。ls $drivename甚至似乎在父目录中也可以正常工作,在子目录中也ls ..可以正常工作。(尽管我不能百分百确定“正常工作”的那些,因为这种行为一开始是不确定的。)我尝试了另外两个外部USB驱动器,并得到了相同的行为。

这里发生了什么?我在Mac OS X 10.11.3上。

编辑:好主意,但我似乎不使用别名,并/bin/ls给出相同的结果。


2
此异常行为可能是别名故障引起的。如果使用该/bin/ls怎么办?
DopeGhoti'3

ls在其他目录下工作正常吗?
利亚姆

/bin/ls给出相同的结果,有时输出.ls似乎在其他目录中正常工作。ls NO\ NAME甚至似乎在父目录中也可以正常工作,在子目录中也ls ..可以正常工作。(尽管我不能百分百确定“正常工作”的行为,因为行为开始时是不确定的。)
leekaiinthesky

您在这些闪存驱动器中使用哪个文件系统?也许是有些异常,从一个基于Windows的文件系统导出
RSFalcon7

ls您使用的是哪个版本?/bin/ls --version应该工作
RSFalcon7'3

Answers:


6

在最新版本的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中没有输出。)

我在运行bash的Terminal.app中看到10.12.6上的相同故障。与csh和相同sh,即使将TERM设置为vt100也是如此。该解决方法也适用于这些shell。

我同意Neil指出我们stat64zsh问题线程中指出的错误。(我曾以为该问题是由有缺陷的和/或伪造的闪存引起的,但仍然想知道这有时是否是一个因素。)

我注意到此错误还会影响:

  • Emacs的转向模式,因为它调用ls,并且
  • ls 在Emacs的shell模式下使用时。

2
我不明白为什么Goro进行了编辑,并且没有提供编辑摘要。我认为他们使答案变得更糟,现在我看到答案是-1。我提供了一种解决方法,删除了“解决方法”指示符后,我似乎声称/正在尝试提供直接答案。我想我提供的不只是评论,而是答案。这不是值得鼓励的吗?我发现了一个新东西;编辑摘要和-1的理由是否合适?Goro还删除了我添加的更简短,更好的答案。我不明白
马修·艾维

1
我在栅栏上;通常,答案需要回答问题,不仅提供更多信息,而且解决问题可能是提问者所寻找的内容的一部分,即使他们没有特别提及。大多数编辑似乎都是不必要的,并且至少有一个肯定弄乱了格式,因此我将它们回滚了。我不确定该帖子是否曾经发表过降票,但目前是2升,0
降票

0

如果有时卸下驱动器,则答案是每次重新插入驱动器时,必须使用cd返回目录。这是因为在删除驱动器后,由​​外壳程序打开的用于读取目录的文件描述符无效,并且在重新插入驱动器时,该描述符未自动初始化(即使您可能已在其他终端或文件管理器中使用了该驱动器)。

如果从不卸下驱动器,则可能是硬件问题,也可能是某些软件由于某种原因卸载了该驱动器。您应该提供系统日志。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.