Bash: пробелы в псевдониме

Я пытаюсь создать псевдонимы в Bash. Что я хочу сделать, это карта ls -la в ls -la | more

В моем файле.bashrc это то, что я пытался:

alias 'ls -la'='ls -la | more'

Однако это не работает, потому что (я предполагаю) у него есть пробелы в псевдониме. Есть ли обходной путь для этого?

4 ответа

Решение

Документация Bash гласит: "Практически для любых целей функции оболочки предпочтительнее псевдонимов". Вот функция оболочки, которая заменяет ls и приводит к тому, что вывод more если аргумент состоит из (только) -la,

ls() {
    if [[ $@ == "-la" ]]; then
        command ls -la | more
    else
        command ls "$@"
    fi
}

Как однострочник:

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

Автоматически выводить трубу:

ls -la

Из справочной страницы псевдонима:

Первое слово каждой простой команды, если оно не заключено в кавычки, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Имя псевдонима и текст замены могут содержать любые допустимые входные данные оболочки, включая метасимволы оболочки, за исключением того, что имя псевдонима может не содержать `='.

Таким образом, только первое слово проверяется на совпадения псевдонимов, что делает невозможным псевдонимы из нескольких слов. Вы можете написать скрипт оболочки, который проверяет аргументы и вызывает вашу команду, если они совпадают, а в противном случае просто вызывает обычный ls (См. Ответ Дениса Уильямсона)

Немного улучшенный подход, взятый из ответа Денниса:

function ls() {
  case $* in
    -la* ) shift 1; command ls -la "$@" | more ;;
    * ) command ls "$@" ;;
  esac
}

Или однострочник:

function ls() { case $* in -la* ) shift 1; command ls -la "$@" | more ;; * ) command ls "$@" ;; esac }

Это позволяет добавлять дополнительные параметры / аргументы после команды, если это необходимо, например, ls -la -h

Вы можете вызвать этот псевдоним еще, но вам нужна цитата, чтобы пробел был частью командного слова. Так "ls -la" -p pattern пройдет -p pattern возможность moreне ls,

Другие вопросы по тегам