在 运行 之前输出 bash 别名完整形式

Output bash alias full form before running

我喜欢经常使用 bash 别名(我正在使用 .zshrc),但我更希望别名能够显示它们的作用。这是因为我必须经常结对编程。我知道做 type alias_name 并且 alias alias_name 会显示描述。有没有办法让我的别名在 运行 之前显示完整形式?我尝试在我的别名前加上 alias alias_name='type alias_name && ...'。但是,此输出也将包括预期的前置代码。有解决办法吗?

bashzsh 中,您可以定义一个命令来打印和执行其参数。然后在您的每个别名中使用该命令。

printandexecute() {
  { printf Executing; printf ' %q' "$@"; echo; } >&2
  "$@"
}
# instead of `alias name="somecommand arg1 arg2"` use 
alias myalias="printandexecute somecommand arg1 arg2"

您甚至可以通过覆盖内置别名本身来自动将 printandexecute 插入到每个别名定义中:

printandexecute() {
  { printf Executing; printf ' %q' "$@"; echo; } >&2
  "$@"
}
alias() {
  for arg; do
    [[ "$arg" == *=* ]] &&
    arg="${arg%%=*}=printandexecute ${arg#*=}"
    builtin alias "$arg"
  done
}

# This definition automatically inserts printandexecute
alias myalias="somecommand arg1 arg2"

交互式会话中的示例。 $ 是提示。

$ myalias "string with spaces"
Executing somecommand arg1 arg2 string\ with\ spaces
actual output of somecommand