- груповий каталог-перший варіант для команди "ls"


13

Я використовую і Ubuntu 16.04, і OS X.

alias ll='ls -Flh --group-directories-first'

Це псевдонім у моєму bashrc, але якимось --group-directories-firstваріантом став незаконним в OS X після того, як я модернізував свій bash до Homebrew. На своєму робочому столі Ubuntu я все ще можу використовувати цю опцію.

У якій версії Bash параметр не підтримується? Версія Bash в моїй машині OS X говоритьGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

Я хотів би використати --group-directories-firstваріант ще раз. Чи є спосіб досягти цього?


1
Ви використовуєте gnu correutils lsабо macOS ls? Ви пробували іншого?
bmike

Відповіді:


12

Встановіть за 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 lsна macOS, яку Homebrew встановлює як, glsале яку можна зробити корисною як lsдекількома способами.

lsце зовнішня команда, а не вбудована Bash. Використання іншої версії або збірки Bash не повинно впливати на неї. Я не впевнений, що сталося, коли ви оновили Bash за допомогою Homebrew. Можливо, більше, ніж Баш також удосконалився; можливо, у вас була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 за те, що помилився у попередній версії цього сценарію.)


Я дотримувався цієї відповіді та використовую: alias ls = 'gls --color -h --group-directories-first' alias ll = 'ls -al'
користувач2875289

1
Я думаю, що у вашому останньому розділі "Або якщо ви вважаєте, що зазвичай віддаєте перевагу запуску ..." , умовне потрібно змінити на:, "$OSTYPE" != linux-gnu оскільки ви хочете отримати псевдонім ls на gls, якщо ви не в системі GNU Linux (наприклад, ви на Mac).
soroushjp

1
@soroushjp Спасибі - ти маєш рацію. (Я виправив це; вибачте за очікування!)
Елія Каган
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.