Zainstalować coreutilsz Homebrew i alias llaby gls -Flh --group-directories-firstzamiast.
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 .bashrcpliku w obu systemach operacyjnych, patrz poniżej.)
W Ubuntu lsjest dostarczany przez GNU Coreutils , który Ubuntu zawsze ma. Dlatego lsobsługuje --group-directories-firstw Ubuntu. Prawdopodobnie używałeś wcześniej wersji GNU Coreutils lsna macOS, którą Homebrew instaluje jako, glsale którą można wykorzystać lsna kilka sposobów.
lsjest 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żelszdefiniowano funkcję powłoki lub alias w globalnym pliku konfiguracyjnym, który został zastąpiony; może miałeś dowiązanie symbolicznels, które wskazałoglsi zostało zastąpione; może nadal coś takiego masz, ale twój$PATHsię zmienił. Cokolwiek się stanie, GNU Coreutils lsobsł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 .bashrcpliku 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 glsswojego systemu Ubuntu. Ale proponuję zamiast sprawdzania OS który jest używany w .bashrc. Chociaż otrzymasz inny llalias zdefiniowany w każdym systemie, to podejście ma tę zaletę, że jest samo dokumentujące. Twój .bashrcbę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 llaliasu, możesz utworzyć lsalias, 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).
lslub macOSls? Próbowałeś już drugiego?