Is there a way to expand aliases inline in bash?
$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.
Sign up to join this communityYou can press Ctrl-Alt-e to perform the readline function shell-expand-line
which will do alias, history and word expansions. Note that on some keyboards Meta is not Alt. You might need to press Esc then Ctrl-e
The functions alias-expand-line
and history-and-alias-expand-line
are not bound by default, but you can bind them by adding lines similar to the following to your ~/.inputrc
file.
"\e\C-l": alias-expand-line
which would make Ctrl-Alt-l (lower case "ell") perform only alias expansion.
"\C-i": "\e\C-l\e\e"
which creates a macro that performs both alias-expand-line
and complete
. It depends on the binding from my answer above and that the default binding for Esc-Esc remains in place. You would still be able to do Esc-Esc if you wanted to do default completion.
Feb 19, 2011 at 16:03
ESC C-e
works for Bash, but C-x a
works for Zsh. Also tested on OS X.
k get po
but not for watch k get po
where alias k=kubectl
.
alias -s
and alias -g
respectively), but bash does not do those. zsh.sourceforge.net/Intro/intro_8.html
For people having zsh & Oh My ZSH installed looking for a simple solution, globalias might be your friend
Expands all glob expressions, subcommands and aliases (including global).
# .zsrc:
alias S="sudo systemctl"
$ S<space>
# expands to:
$ sudo systemctl
to install just add "globalias" to you .zshrc plugin list
plugins=(... globalias)
Then just press
SPACE
to trigger the expansion of a command you've written.If you only want to insert a space without expanding the command line, press
CTRL+SPACE
This does not work. But I'm guessing/hoping something like this can be done to do what you want to do. You would have to use your own completion script. This is how you make one:
_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
Now source the full bash_completion file(http://caliban.org/bash) and put the above mentioned script in a file inside bash_completion.d directory that the script you get from the url references. Let me know if it doesn't work.
Thanks.
This actually might be a much simpler way to do what you're trying to (bash
version >= 4.2.29):
shopt -s direxpand
shopt -s expand_aliases
shopt
's man
page: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
alias ll='ls -l
the shell would interpret 'll' as command/function 'll' which likely does not exist.
expand_aliases
shell option is set using shopt
." gnu.org/software/bash/manual/html_node/Aliases.html#Aliases