Installieren Sie stattdessen coreutils
mit Homebrew und Alias ll
zu gls -Flh --group-directories-first
.
brew install coreutils
installiert GNU Coreutils , falls es nicht installiert ist.
- Verwenden Sie
alias ll='gls -Flh --group-directories-first'
in .bashrc
.
(Wenn Sie .bashrc
in beiden Betriebssystemen dieselbe Datei verwenden möchten , siehe unten.)
In Ubuntu ls
wird von GNU Coreutils bereitgestellt , die Ubuntu immer hat. Deshalb ls
unterstützt --group-directories-first
in Ubuntu. Wahrscheinlich haben Sie auch schon einmal die GNU Coreutils-Version von ls
unter macOS verwendet, die Homebrew installiert, gls
aber ls
auf verschiedene Arten nutzbar gemacht werden kann.
ls
ist ein externer Befehl, kein eingebauter Bash. Die Verwendung einer anderen Version oder eines anderen Builds von Bash sollte sich nicht darauf auswirken. Ich bin mir nicht sicher, was passiert ist, als Sie Bash mit Homebrew aktualisiert haben. Vielleicht wurde auch mehr als Bash aktualisiert; Möglicherweise wurdels
in einer globalen KonfigurationsdateieineShell-Funktion oder ein Alias definiert, die ersetzt wurde. Vielleicht hatten Sie eine symbolische Verknüpfungls
, auf die hingewiesengls
und die überschrieben wurde. Vielleicht hast du noch so etwas, aber dein$PATH
hat sich geändert. Was auch immer passiert ist, GNU Coreutils ls
unterstützt--group-directories-first
und ein Wechsel dorthin (wie bmike meiner Meinung nach vorschlägt ) sollte Ihr Problem beheben.
Wenn Sie aus irgendeinem Grund .bashrc
in beiden Systemen genau dieselbe Datei verwenden möchten , gibt es einige mögliche Ansätze. Sie können einen Symlink, ein Wrapper-Skript, eine Shell-Funktion oder (da die Bash-Alias-Erweiterung nicht rekursiv ist) einen Shell-Alias für gls
Ihr Ubuntu-System erstellen . Aber ich schlage vor , statt Kontrolle , welche OS verwendet wird in .bashrc
. Obwohl ll
in jedem System ein anderer Alias definiert wird, hat dieser Ansatz den Vorteil, dass er sich selbst dokumentiert. Ihr .bashrc
Wille macht für Sie in einem Jahr oder einem Monat Sinn.
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
Wenn Sie normalerweise lieber die Coreutils ausführen ls
, können Sie einen Alias erstellen , selbst wenn Sie den ll
Alias nicht verwenden :ls
gls
if [ "$OSTYPE" != linux-gnu ]; then # Is this the macOS system?
alias ls=gls
fi
alias ll='ls -Flh --group-directories-first'
(Vielen Dank an soroushjp für den Fehler in einer früheren Version dieses Skripts.)
ls
oder das MacOSls
? Hast du den anderen ausprobiert?