如何从' ls'中删除文件类型分类器oh-my-zsh和Mac上的命令输出?

时间:2016-06-01 17:46:08

标签: shell zsh oh-my-zsh

我怀疑这与我的Mac上的oh-my-zsh设置有关,但我无法理解。当我在命令行上执行ls *.sh时,我会得到类似的内容:

foo.sh* bar.sh*

我了解默认情况下-F适用于ls

  

-F在作为目录的每个路径名之后立即显示斜杠(' /'),在每个可执行的路径名后面显示一个星号(' *'),at   在每个符号链接后面加上一个等号(' =')   套接字,每次白化后的百分号('%')和垂直条   (' |')在每个FIFO之后。

我真的想列出没有分类器的文件名。这是可取的,因为没有它,我的for

for f in `ls *.sh` 
do
wc -l $f
done

中断可执行shell脚本(因为尾随*):

wc: foo.sh*: open: No such file or directory 
wc: bar.sh*: open: No such file or directory

当然,我可以轻松解决这个问题。我只是想知道我是否可以在ls命令的输出上处理它。此外,当我的shell为bash时,这可以正常工作。

1 个答案:

答案 0 :(得分:2)

无需使用ls即可生成匹配文件列表。您可以直接使用该模式:

for f in *.sh
do
    wc -l $f
done

这也有利于处理包含空格的文件名。

一般来说:ls的输出是供人类消费的,不应该被解析。通常文件列表可以直接使用通配符生成,ls可能提供的任何信息都可以通过其他方式检索(例如stat)。

话虽如此:

默认情况下未启用

-F,因此为什么有一个选项。我怀疑ls是别名。您可以查看

whence -v ls

默认情况下, oh-my-zsh 会为ls创建别名,-F不属于设置。

如果您只想使用未经修改的ls(可能有不同的选项),可以添加command预命令修饰符:

command ls

这将运行外部命令ls(通常为/bin/ls)而不是别名或函数。

如果您想要永久删除-F,可以在配置的最后覆盖它。或者您追踪它的位置并在那里进行更改。此命令可能有助于找到别名的设置位置:

grep -r $(whence ls) ~/.zshrc ~/oh-my-zsh.sh ~/.oh-my-zsh

根据您的设置,可能还有其他配置文件。