在 运行 之前输出 bash 别名完整形式
Output bash alias full form before running
我喜欢经常使用 bash 别名(我正在使用 .zshrc),但我更希望别名能够显示它们的作用。这是因为我必须经常结对编程。我知道做 type alias_name
并且 alias alias_name
会显示描述。有没有办法让我的别名在 运行 之前显示完整形式?我尝试在我的别名前加上 alias alias_name='type alias_name && ...'
。但是,此输出也将包括预期的前置代码。有解决办法吗?
在bash
和zsh
中,您可以定义一个命令来打印和执行其参数。然后在您的每个别名中使用该命令。
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
我喜欢经常使用 bash 别名(我正在使用 .zshrc),但我更希望别名能够显示它们的作用。这是因为我必须经常结对编程。我知道做 type alias_name
并且 alias alias_name
会显示描述。有没有办法让我的别名在 运行 之前显示完整形式?我尝试在我的别名前加上 alias alias_name='type alias_name && ...'
。但是,此输出也将包括预期的前置代码。有解决办法吗?
在bash
和zsh
中,您可以定义一个命令来打印和执行其参数。然后在您的每个别名中使用该命令。
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