Zainstalować coreutils
z Homebrew i alias ll
aby gls -Flh --group-directories-first
zamiast.
brew install coreutils
instaluje GNU Coreutils , na wypadek, gdyby nie został zainstalowany.
- Użyj
alias ll='gls -Flh --group-directories-first'
w .bashrc
.
(Jeśli chcesz użyć tego samego .bashrc
pliku w obu systemach operacyjnych, patrz poniżej.)
W Ubuntu ls
jest dostarczany przez GNU Coreutils , który Ubuntu zawsze ma. Dlatego ls
obsługuje --group-directories-first
w Ubuntu. Prawdopodobnie używałeś wcześniej wersji GNU Coreutils ls
na macOS, którą Homebrew instaluje jako, gls
ale którą można wykorzystać ls
na kilka sposobów.
ls
jest poleceniem zewnętrznym, a nie wbudowanym w Bash. Używanie innej wersji lub kompilacji Bash nie powinno na to wpływać. Nie jestem pewien, co się stało, kiedy zaktualizowałeś Bash za pomocą Homebrew. Może zaktualizowano też więcej niż Bash; możels
zdefiniowano funkcję powłoki lub alias w globalnym pliku konfiguracyjnym, który został zastąpiony; może miałeś dowiązanie symbolicznels
, które wskazałogls
i zostało zastąpione; może nadal coś takiego masz, ale twój$PATH
się zmienił. Cokolwiek się stanie, GNU Coreutils ls
obsługuje--group-directories-first
i przejście na to (jak sądzę sugeruje bmike ) powinno rozwiązać twój problem.
Jeśli z jakiegoś powodu chcesz użyć dokładnie tego samego .bashrc
pliku w obu systemach, istnieje kilka możliwych rozwiązań. Możesz utworzyć dowiązanie symboliczne, skrypt opakowujący, funkcję powłoki lub (ponieważ rozszerzenie aliasu Bash nie jest rekurencyjne) alias powłoki dla gls
swojego systemu Ubuntu. Ale proponuję zamiast sprawdzania OS który jest używany w .bashrc
. Chociaż otrzymasz inny ll
alias zdefiniowany w każdym systemie, to podejście ma tę zaletę, że jest samo dokumentujące. Twój .bashrc
będzie sensu do Ciebie w ciągu roku lub miesiąca.
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
Lub jeśli okaże się, że zwykle wolisz uruchamiać Coreutils ls
, nawet jeśli nie używasz ll
aliasu, możesz utworzyć ls
alias, aby gls
:
if [ "$OSTYPE" != linux-gnu ]; then # Is this the macOS system?
alias ls=gls
fi
alias ll='ls -Flh --group-directories-first'
(Podziękowania dla soroushjp za złapanie błędu we wcześniejszej wersji tego skryptu).
ls
lub macOSls
? Próbowałeś już drugiego?