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
,