【问题标题】:ls - Not working in certain directoriesls - 在某些目录中不起作用
【发布时间】:2023-03-16 02:09:01
【问题描述】:

下午好,我最近下载了this .bash_profile 设置,但是在终端(Mac OS X - Sierra,10.12.6)中运行ls 命令时遇到了一个小问题。

ls: illegal option -- - usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]

如您所见,我没有别名,而 ls 是它应该在的地方(至少我希望如此)。

这里发生了什么?我应该做些什么来尝试纠正这种情况?

【问题讨论】:

    标签: linux macos terminal directory ls


    【解决方案1】:

    问题在于 * 在 shell 中的工作方式。

    有些人认为当您编写ls * 时,shell 将运行ls 并传递通配符,该命令将列出所有文件。但实际上是外壳将*扩展为所有文件的列表并将它们传递给ls

    TL;DR;您有一个以- 开头的目录名! (我认为它只是命名为-)。因此,当您运行ls -d */ 时,它会扩展为ls -d -/ bar/ muz/ ...。你可以用echo ls -d */看到实际的扩展

    解决方案:写ls -d -- */-- 将告诉命令不要将任何以 - 开头的命令解释为选项,而是作为文件名。

    【讨论】:

    • 嗯,这有点不直观,但仍然令人着迷!你知道这种情况是否有任何历史原因?我很想了解更多!
    • @RicardoIglesias:确实不直观。感谢您通过ls 发现了这一点...我多年前通过rm 发现了这一点!
    • 另一种解决方案(对于ls 的版本或其他不支持-- 的命令)是使用ls -d ./*/。文件模式前面的额外./ 不会影响它们作为文件名的解释(“./”只是表示“在当前目录中”),但它确实使它们明确,因为./- 不会被误认为是命令选项。
    • 谢谢 - StackOverflow 今天再次拯救了世界!这真的很奇怪,不直观。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    相关资源
    最近更新 更多