I love alias commands, but also aalias_forlways like to 🕵️♀️ spy on what is the real command behind an alias. There are a lot of ways to see it:
- Using the
alias <command>
on terminal - Using the keyboard shortcut combination
ctrl+x a
(notctrl+x+a
) to expand it - Using the globalias plugin
But all of them need an extra step, and I found a way to see it always before the command runs.
Reveal
We can use a function to search the command associated with an alias adding this script on ~/.zshrc
file.
local cmd_alias=""
# Reveal Executed Alias
alias_for() {
[[ $1 =~ '[[:punct:]]' ]] && return
local search=${1}
local found="$( alias $search )"
if [[ -n $found ]]; then
found=${found//\\//} # Replace backslash with slash
found=${found%\'} # Remove end single quote
found=${found#"$search="} # Remove alias name
found=${found#"'"} # Remove first single quote
echo "${found} ${2}" | xargs # Return found value (with parameters)
else
echo ""
fi
}
expand_command_line() {
first=$(echo "$1" | awk '{print $1;}')
rest=$(echo ${${1}/"${first}"/})
if [[ -n "${first//-//}" ]]; then # is not hypen
cmd_alias="$(alias_for "${first}" "${rest:1}")" # Check if there's an alias for the command
if [[ -n $cmd_alias ]] && [[ "${cmd_alias:0:1}" != "." ]]; then # If there was and not start with dot
echo "${T_GREEN}❯ ${T_YELLOW}${cmd_alias}${F_RESET}" # Print it
fi
fi
}
pre_validation() {
[[ $# -eq 0 ]] && return # If there's no input, return. Else...
expand_command_line "$@"
}
Now we need to run this function every time the alias is entered. Happily, ZSH has a preexec function that can be associated with a hook. Just add this script after the previous on ~/.zshrc
file.
autoload -U add-zsh-hook # Load the zsh hook module.
add-zsh-hook preexec pre_validation # Adds the hook
I'm not planning to remove this hook, but you can do it with this command:
add-zsh-hook -d preexec pre_validation # Remove it for this hook.
Once finish, reopen all terminals or update his source running source ~/.zshrc
command and now you can see those secret commands.
Example
Yellow: alias
Red: command behind revealed
Sources:
You can download or clone this code and other ZSH utilities from GitHub: dot Files repository.
That’s All Folks!
Happy Coding 🖖
Top comments (8)
Thanks. Didn't know about the hook or other options.
For manually check, I usually use which, or type.
I also like to use my
ag
alias. To find an alias based on a key or value.github.com/MichaelCurrin/dotfiles/...
e.g. find all aliases using
ls
.Or I could find one by key.
Just FYI, fish shell does that by default in a more interesting manner: it actually expands the command. So if you type e.g.
ll
and press space, fish would replacell
withls -lh
.Nice idea, I found a way to do it on ZSH adding the Globalias plugin.
For anyone using bash. Just press Ctrl+Alt+e
Good information, I didn't know it.
I found that
ctrl+x a
do the same for ZSHThis is really cool! Thanks for sharing it!
It Is so pretty, thanks so much, it is so useful.
You welcome @meldak 🤘