在zsh或bash中打印执行的别名
目前的情况是,我在.zshrc中定义了一些别名 alias gco='git checkout' alias cdp='cd ..' 还有那么多. 例如: $> gco master > Command: git checkout master > Git process ... 类似的东西,如果解决方案也适用于bash会更好! 解决方法这是一个很好的问题.我们可以通过定义几个函数来扩展别名,然后在执行它们之前使用preexec钩子来运行它们.我从here那里得到了答案. 1.评估所有别名 _aliases="$(alias -Lr 2>/dev/null || alias)" alias_for() { [[ $1 =~ '[[:punct:]]' ]] && return local found="$( echo "$_aliases" | sed -nE "/^alias ${1}='?(.+)/s//1/p" )" [[ -n $found ]] && echo "${found%'}" } 首先,将所有别名存储在变量中.别名-r打印所有常规别名(不是全局或后缀),别名-L以“适合在启动脚本中使用的方式”打印它们. alias history='fc -l 1' alias ls='ls -F -G' alias lsdf='ls -1l ~/.*(@)' alias mv='mv -v' 将此与别名的输出进行比较: history='fc -l 1' ls='ls -F -G' lsdf='ls -1l ~/.*(@)' mv='mv -v' 2.检查是否输入了别名的功能. 如果输入了别名,我们现在可以检测到它,然后将其打印出来: expand_command_line() { [[ $# -eq 0 ]] && return # If there's no input,return. Else... local found_alias="$(alias_for $1)" # Check if there's an alias for the comand. if [[ -n $found_alias ]]; then # If there was echo ${found_alias} # Print it. fi } 3.每次输入命令时运行此命令 preexec功能非常适合这种情况.它的功能是:
from the zsh Manual,chapter 9. 注意,我们可能只是使用preeexec函数来显示正在运行的内容. 要将我们的函数添加到preexec,我们使用钩子using this example: autoload -U add-zsh-hook # Load the zsh hook module. add-zsh-hook preexec expand_command_line # Adds the hook 要稍后删除钩子,我们可以使用: # add-zsh-hook -d preexec expand_command_line # Remove it for this hook. 我的壳 这是我运行时shell的样子: $1 cd - $rake bundle exec rake ^C $chmod usage: chmod [-fhv] [-R [-H | -L | -P]] [-a | +a | =a [i][# [ n]]] mode|entry file ... chmod [-fhv] [-R [-H | -L | -P]] [-E | -C | -N | -i | -I] file ... $git lg1 fatal: Not a git repository (or any of the parent directories): .git 错误(或“功能”) 从我的shell示例中可以看出,当运行没有别名的命令(如chmod)时,不会显示完整命令.运行别名命令(如1或rake)时,将显示完整命令. 运行git别名(例如git lg1)时,不会展开git别名.如果你看一下我的first link,完整的例子确实使用了git别名扩展 – 你应该采用它并修改git别名对你来说至关重要. (编辑:4S站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |