安装coreutils
有自制和别名ll
来gls -Flh --group-directories-first
代替。
brew install coreutils
如果未安装GNU Coreutils,则将其安装。
alias ll='gls -Flh --group-directories-first'
在中使用.bashrc
。
(如果要.bashrc
在两个操作系统中使用相同的文件,请参见下文。)
在Ubuntu中,ls
由 Ubuntu始终提供的GNU Coreutils提供。这就是为什么在Ubuntu中ls
支持--group-directories-first
。也许您之前也曾ls
在macOS上使用过GNU Coreutils版本,Homebrew可以作为原版安装,gls
但可以通过ls
多种方式使用。
ls
是外部命令,不是内置的Bash。使用其他版本或版本的Bash不会影响它。我不确定使用Homebrew升级Bash时会发生什么。也许不仅仅是Bash升级了;也许您在ls
替换的全局配置文件中定义了shell函数或别名;也许您有一个ls
指向gls
并被覆盖的符号链接;也许您仍然有类似的东西,但是您$PATH
已经改变了。无论发生什么情况, GNU Coreutils都ls
支持--group-directories-first
,并切换到它(我相信 bmike建议)可以解决您的问题。
如果出于某种原因要.bashrc
在两个系统中使用完全相同的文件,则有几种可能的方法。您可以gls
在Ubuntu系统中创建符号链接,包装器脚本,shell函数或(因为Bash别名扩展是非递归的)shell别名。但我建议,而不是正在使用OS检查在.bashrc
。尽管您将ll
在每个系统中定义一个不同的别名,但是这种方法具有自我记录的优势。您.bashrc
将在一年或一个月内对您有意义。
if [ "$OSTYPE" == linux-gnu ]; then # Is this the Ubuntu system?
alias ll='ls -Flh --group-directories-first'
else
alias ll='gls -Flh --group-directories-first'
fi
或者,如果发现您通常更喜欢运行Coreutils ls
,即使您不使用ll
别名,也可以将ls
别名设为gls
:
if [ "$OSTYPE" != linux-gnu ]; then # Is this the macOS system?
alias ls=gls
fi
alias ll='ls -Flh --group-directories-first'
(感谢去soroushjp用于捕捉错误在该脚本的早期版本。)
ls
还是macOSls
?你试过其他吗?