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

Я пытаюсь создать псевдонимы в bash. То, что я хочу сделать, это map ls -la to ls -la | more ls -la | more

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

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

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

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

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

Как однострочный:

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

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

 ls -la 

На странице man alias :

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

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

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

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

Или однострочный:

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

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

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

  • Как использовать команды «-s», «-t» и «-c» команды tr в Unix?
  • Как сделать разрешение на новый файл наследованием из родительского каталога?
  • Как я могу выполнить полную установку Cygwin с помощью нового установщика?
  • Невозможно редактировать файлы в группе _www на OS X
  • Сортировка не согласована с помощью команды Unix `sort '
  • Подключение к сети Wi-Fi через терминал Mac
  • Странные изменения прав при сохранении файла в разделе Samba из редактора Windows
  • Ls -la symbolics ... что означает этот последний символ?
  • Процесс автоматического перезапуска при сбое
  • Dyld: библиотека не загружена: /usr/lib/libcurl.4.dylib curl Ошибка SSL
  • Что означает «rc» в «.bashrc» и т. Д.?
  • Давайте будем гением компьютера.