Установить coreutilsс Homebrew и псевдоним , llчтобы gls -Flh --group-directories-firstвместо этого.
brew install coreutils устанавливает GNU Coreutils , если он не установлен.
- Используйте
alias ll='gls -Flh --group-directories-first'в .bashrc.
(Если вы хотите использовать один и тот же .bashrcфайл в обеих операционных системах, см. Ниже.)
В Ubuntu lsпредоставляется GNU Coreutils , который всегда есть в Ubuntu. Вот почему lsподдерживает --group-directories-firstв Ubuntu. Возможно, вы использовали версию GNU Coreutils для lsMacOS и раньше, которую также устанавливает Homebrew, glsно которую можно использовать lsнесколькими способами.
lsэто внешняя команда, а не встроенная команда Bash. Использование другой версии или сборки Bash не должно влиять на это. Я не уверен, что случилось, когда вы обновили Bash с помощью Homebrew. Может быть, больше, чем Bash тоже был улучшен; возможно у вас былаlsфункция оболочки или псевдоним, определенный в глобальном файле конфигурации, который был заменен; может быть, у вас была символическая ссылка,lsкоторая указалаglsи была перезаписана; может быть, у вас все еще есть что-то подобное, но ваш$PATHизменился. Что бы ни случилось, GNU Coreutils lsподдерживает--group-directories-first , и переключение на него (как я полагаю, bmike предлагает ) должно решить вашу проблему.
Если по какой-то причине вы хотите использовать один и тот же .bashrcфайл в обеих системах, есть несколько возможных подходов. Вы можете создать символическую ссылку, скрипт-обертку, функцию оболочки или (поскольку расширение псевдонима Bash нерекурсивно) псевдоним для glsвашей системы Ubuntu. Но я предлагаю вместо этого проверить, какая ОС используется в .bashrc. Несмотря на то, что вы получите разные llпсевдонимы, определенные в каждой системе, этот подход имеет преимущество самодокументирования. Ваш .bashrcбудет иметь смысл для вас через год или месяц.
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
Или, если вы обнаружите, что обычно предпочитаете запускать Coreutils ls, даже если вы не используете llпсевдоним, вы можете создать lsпсевдоним для gls:
if [ "$OSTYPE" != linux-gnu ]; then # Is this the macOS system?
alias ls=gls
fi
alias ll='ls -Flh --group-directories-first'
(Спасибо большое soroushjp за обнаружение ошибки в более ранней версии этого скрипта.)
lsили MacOSls? Ты пробовал другой?