如何列出所有linux别名

问题描述 投票:0回答:2

我知道在 Linux 中我可以使用

alias
命令来获取已定义别名的列表。我现在尝试通过 Go 代码执行相同的操作:

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:

我考虑的替代方案是解析

~/.bashrc
文件以获取定义的别名列表,但我遇到过这种情况,其中
bashrc
列出了另一个
custom_aliases.sh
文件,并且所有别名都列在那里。这就是为什么我尝试使用
alias
命令列出所有别名。

linux go alias subshell
2个回答
5
投票

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

$ type alias
alias is a shell builtin

因此,您需要根据您使用的 shell 调用 shell 的

alias
命令。例如,对于
bash
,您需要使用

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

但这仍然不会给你答案,因为在这种情况下,bash 不会

source
.bashrc
文件
,因此别名在子 shell 中不可用。您需要
--rcfile
--login
/
-l
选项,还需要 将 shell 指定为与
-i

交互
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... 可能会使用不同的选项获取不同的文件,因此如果
-ic
-lic
不起作用

,请检查您的 shell 文档

0
投票

怎么样 $compgen -a -a 告诉命令 compgen 列出所有别名

$别名

© www.soinside.com 2019 - 2024. All rights reserved.