将嵌套别名解析为其源命令

将嵌套别名解析为其源命令

为了方便起见,我创建了几个别名。但是现在我需要通过发送有用的命令来提供帮助,并且它充满了别名。我尝试过这样做,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,那么执行将停止,并且您只会看到到目前为止的扩展别名。

相关内容