在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别名对你来说至关重要. (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
