Installieren Sie stattdessen coreutilsmit Homebrew und Alias llzu 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 .bashrcin beiden Betriebssystemen dieselbe Datei verwenden möchten , siehe unten.)
In Ubuntu lswird von GNU Coreutils bereitgestellt , die Ubuntu immer hat. Deshalb lsunterstützt --group-directories-firstin Ubuntu. Wahrscheinlich haben Sie auch schon einmal die GNU Coreutils-Version von lsunter macOS verwendet, die Homebrew installiert, glsaber lsauf verschiedene Arten nutzbar gemacht werden kann.
lsist 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 wurdelsin einer globalen KonfigurationsdateieineShell-Funktion oder ein Alias definiert, die ersetzt wurde. Vielleicht hatten Sie eine symbolische Verknüpfungls, auf die hingewiesenglsund die überschrieben wurde. Vielleicht hast du noch so etwas, aber dein$PATHhat sich geändert. Was auch immer passiert ist, GNU Coreutils lsunterstützt--group-directories-first und ein Wechsel dorthin (wie bmike meiner Meinung nach vorschlägt ) sollte Ihr Problem beheben.
Wenn Sie aus irgendeinem Grund .bashrcin 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 glsIhr Ubuntu-System erstellen . Aber ich schlage vor , statt Kontrolle , welche OS verwendet wird in .bashrc. Obwohl llin jedem System ein anderer Alias definiert wird, hat dieser Ansatz den Vorteil, dass er sich selbst dokumentiert. Ihr .bashrcWille 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 llAlias nicht verwenden :lsgls
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.)
lsoder das MacOSls? Hast du den anderen ausprobiert?