Как расширить псевдонимы, встроенные в Bash?
Есть ли способ расширить псевдонимы, встроенные в Bash?
$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l
4 ответа
Вы можете нажать Ctrl-Alt-e, чтобы выполнить функцию readline shell-expand-line
который будет делать псевдоним, историю и расширение слов. Обратите внимание, что на некоторых клавиатурах Meta не является Alt. Возможно, вам придется нажать Esc, затем Ctrl-e
Функции alias-expand-line
а также history-and-alias-expand-line
по умолчанию не связаны, но вы можете связать их, добавив строки, подобные следующим ~/.inputrc
файл.
"\e\C-l": alias-expand-line
что заставило бы Ctrl-Alt-l (нижний регистр "ell") выполнять только раскрытие псевдонима.
Для тех, кто установил zsh и ищет простое решение, globalias может быть вашим другом
Расширяет все глобальные выражения, подкоманды и псевдонимы (включая глобальные).
# .zsrc:
alias S="sudo systemctl"
$ S<space>
# expands to:
$ sudo systemctl
для установки просто добавьте "globalias" в список плагинов.zshrc
plugins=(... globalias)
Тогда просто нажмите
SPACE
запустить расширение команды, которую вы написали.Если вы хотите вставить только пробел без расширения командной строки, нажмите
CTRL+SPACE
На самом деле это может быть гораздо проще сделать то, что вы пытаетесь (bash
версия>= 4.2.29):
shopt -s direxpand
shopt -s expand_aliases
shopt
"s man
страница: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
Это не работает. Но я предполагаю / надеюсь, что что-то подобное можно сделать, чтобы делать то, что вы хотите сделать. Вы должны будете использовать свой собственный скрипт завершения. Вот как вы делаете один:
_ll()
{
COMPREPLY=(ls -l)
#The next line does not work. I just hope there were a way to replace that word
COMP_WORDS[COMP_CWORD-1]="ls -l"
}
complete -F _ll ll
Теперь поставьте полный файл bash_completion ( http://caliban.org/bash) и поместите вышеупомянутый скрипт в файл внутри каталога bash_completion.d, который скрипт получит из ссылок URL. Дайте мне знать, если это не сработает.
Благодарю.