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 🖖
Latest comments (9)
Also you could add
alias aliasname;
to the beginning or end of the alias and it will always print the alias at the begining or endI always want to know exactly what I'm running. The older I get the more I forget. lol
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.
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 ZSHJust 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.
This is really cool! Thanks for sharing it!
It Is so pretty, thanks so much, it is so useful.
You welcome @meldak 🤘