安装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?你试过其他吗?