如何列出所有 linux 别名

How to list all the linux aliases

提问人:raviabhiram 提问时间:5/16/2023 最后编辑:phuclvraviabhiram 更新时间:5/16/2023 访问量:198

问:

我知道在 Linux 中,我可以使用该命令来获取已定义的别名列表。我现在正试图通过 Go 代码做同样的事情:alias

func ListAlias() error {
    out, err := exec.Command("alias").Output()
    if err != nil {
        fmt.Println(err)
        return err
    }
    fmt.Println(out)
    return nil
}

但返回的只是:

exec: "alias": executable file not found in $PATH

我试图寻找实际的二进制文件在哪里,但这也无济于事:alias

$whereis alias
alias:

我考虑过的替代方案是解析文件以查找定义的别名列表,但我遇到过这种情况,其中列出了另一个文件,并且所有别名都列在那里。这就是为什么我尝试使用该命令列出所有别名的原因。~/.bashrcbashrccustom_aliases.shalias

Linux Go 别名 子壳

评论

3赞 ndc85430 5/16/2023
值得一提的是:是内置的 Bash,所以不是您可以在 shell 之外运行的命令。alias
5赞 bereal 5/16/2023
也就是说,您可以运行.exec.Command("bash", "-ic", "alias")

答:

5赞 phuclv 5/16/2023 #1

alias不是可执行文件,而是内置的 shell。您可以通过运行轻松看到这一点

$ type alias
alias is a shell builtin

因此,您需要根据使用的 shell 调用 shell 的命令。例如,您需要使用aliasbash

out, err := exec.Command("/bin/bash", "-c", "alias").Output()

但这仍然不会给你答案,因为在这种情况下,bash 不会提供 .bashrc 文件,因此别名在子 shell 中不可用。您将需要 or / 选项,并且还需要将 shell 指定为与 -i 交互--rcfile--login-l

out, err := exec.Command("/bin/bash", "-lic", "alias").Output()
// or
out, err := exec.Command("/bin/bash", "--rcfile", "~/.bashrc", "-ic", "alias").Output()

exec.Command("/bin/bash", "-ic", "alias")也可能起作用,具体取决于您的别名的来源。其他 shell,如 zsh、sh、dash......可能会使用不同的选项获取不同的文件,因此请检查 shell 的文档是否有效-ic-lic