Installa coreutils
con Homebrew e alias ll
in gls -Flh --group-directories-first
invece.
-
brew install coreutils
installa GNU Coreutils , nel caso in cui non sia installato.
- Utilizza
alias ll='gls -Flh --group-directories-first'
in .bashrc
.
(Se si desidera utilizzare lo stesso file .bashrc
in entrambi i sistemi operativi, vedere di seguito.)
In Ubuntu, ls
è fornito da GNU Coreutils , che Ubuntu ha sempre. Ecco perché ls
supporta --group-directories-first
in Ubuntu. Probabilmente hai utilizzato la versione GNU Coreutils di ls
su macOS anche prima, che Homebrew installa come gls
ma che può essere reso utilizzabile come ls
in diversi modi.
ls
è un comando esterno, non un Bash incorporato . L'uso di una versione o build diversa di Bash non dovrebbe influenzarlo. Non sono sicuro di cosa sia successo quando hai aggiornato Bash usando Homebrew. Forse più di Bash è stato aggiornato anche; forse hai una funzione di shell ls
o un alias definito in un file di configurazione globale che è stato sostituito; forse hai avuto un link simbolico ls
che aveva indicato gls
ed è stato sovrascritto; forse hai ancora qualcosa di simile ma il tuo $PATH
è cambiato. Qualunque cosa sia successa, GNU Coreutils ls
supporta --group-directories-first
e passando ad esso (come credo bmike è suggerendo ) dovrebbe risolvere il tuo problema.
Se per qualche motivo si desidera utilizzare esattamente lo stesso file .bashrc
in entrambi i sistemi, ci sono alcuni possibili approcci. Puoi creare un link simbolico, uno script wrapper, una funzione di shell o (perché l'espansione dell'alias di Bash non è ricorsiva) alias di shell per gls
nel tuo sistema Ubuntu. Tuttavia, suggerisco di verificare quale sistema operativo viene utilizzato in .bashrc
. Sebbene si ottenga un alias diverso di ll
definito in ciascun sistema, questo approccio ha il vantaggio di essere auto-documentante. Il tuo .bashrc
ha senso per te tra un anno o un mese.
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
O se ritieni che di solito preferisci eseguire Coreutils ls
, anche se non stai utilizzando l'alias ll
, puoi rendere ls
un alias a gls
:
if [ "$OSTYPE" == linux-gnu ]; then # Is this the Ubuntu system?
alias ls=gls
fi
alias ll='ls -Flh --group-directories-first'