提问人:raviabhiram 提问时间:5/16/2023 最后编辑:phuclvraviabhiram 更新时间:5/16/2023 访问量:198
如何列出所有 linux 别名
How to list all the linux aliases
问:
我知道在 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:
我考虑过的替代方案是解析文件以查找定义的别名列表,但我遇到过这种情况,其中列出了另一个文件,并且所有别名都列在那里。这就是为什么我尝试使用该命令列出所有别名的原因。~/.bashrc
bashrc
custom_aliases.sh
alias
答:
5赞
phuclv
5/16/2023
#1
alias
不是可执行文件,而是内置的 shell。您可以通过运行轻松看到这一点
$ type alias
alias is a shell builtin
因此,您需要根据使用的 shell 调用 shell 的命令。例如,您需要使用alias
bash
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
评论
alias
exec.Command("bash", "-ic", "alias")