为了方便起见,我创建了几个别名。但是现在我需要通过发送有用的命令来提供帮助,并且它充满了别名。我尝试过这样做,type u
但它返回的只是
up && ap upgrade -y --show-progress && r && ap check && ap autoclean
这些都是别名u
:
alias a='alias'
a ap='apt-get'
a r='ap autoremove -y'
a up='ap update'
答案1
使用您编写的别名(准备运行)按下Ctrl-Alt-e命令并Bash 将扩展它。Ctrl-Alt-e是 readline 命令的默认绑定shell-expand-line
。
每次推送Ctrl-Alt-eBash 都会扩展一层别名,因此请重复推送它,直到您的命令扩展至您需要的程度。
如果您的Meta键不是Alt,请替换它,或按Escape Ctrl-e。
还有一个alias-expand-line
默认情况下未绑定的函数,仅扩展别名。
答案2
我在上发布了类似的问题堆栈溢出(可能应该在 Unix 和 Linux 上发布)。
我的解决方案是编写一个 bash 函数:
xtrace() {
local eval_cmd
printf -v eval_cmd '%q' "${@}"
{ set -x
eval "${eval_cmd}"
} 2>&1 | grep '^++'
return "${PIPESTATUS[0]}"
}
所以xtrace u
会打印出类似的内容:
++ apt-get update
++ apt-get upgrade -y --show-progress
++ apt-get autoremove -y
++ apt-get check
++ apt-get autoclean
请记住,这实际上会执行您传递给它的任何别名,因此如果您不想执行u
,那么 @MichaelHomer 的解决方案是更好的方法。另外,由于您的&&
链,如果您的别名中的任何一个命令不返回 0,那么执行将停止,并且您只会看到到目前为止的扩展别名。