英文:
How to list all the linux aliases
问题
我知道在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": 在$PATH中找不到可执行文件
我尝试查找alias
的实际二进制文件,但是没有找到任何结果:
$whereis alias
alias:
我考虑的另一种方法是解析~/.bashrc
文件以获取已定义的别名列表,但是我遇到了这样的情况:bashrc
文件列出了另一个custom_aliases.sh
文件,并且所有的别名都在那里列出。这就是为什么我尝试使用alias
命令列出所有别名的原因。
英文:
I am aware that in Linux I can use the alias
command to get a list of defined aliases. I am now trying to do the same through Go code with:
func ListAlias() error {
out, err := exec.Command("alias").Output()
if err != nil {
fmt.Println(err)
return err
}
fmt.Println(out)
return nil
}
but all that were returned were:
exec: "alias": executable file not found in $PATH
I tried looking for where the actual binary of alias
is but that leads nowhere either:
$whereis alias
alias:
The alternative I've considered is to parse the ~/.bashrc
file for the list of aliases defined but I have encountered this scenario where the bashrc
lists another custom_aliases.sh
file and all the aliases are listed there. That's why I am trying to use the alias
command to list all the aliases.
答案1
得分: 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
选项,并且还需要使用-i
指定shell为交互式:
out, err := exec.Command("/bin/bash", "-lic", "alias").Output()
// 或者
out, err := exec.Command("/bin/bash", "--rcfile", "~/.bashrc", "-ic", "alias").Output()
exec.Command("/bin/bash", "-ic", "alias")
也可能适用,这取决于你的别名是从哪里加载的。其他像zsh、sh、dash等的shell可能使用不同的选项加载不同的文件,所以如果-ic
或-lic
不起作用,可以查阅你的shell的文档。
英文:
alias
isn't an executable but a shell builtin. You can easily see that by running
$ type alias
alias is a shell builtin
Therefore you need to call the shell's alias
command depending on which shell you're using. For example with bash
you'll need to use
out, err := exec.Command("/bin/bash", "-c", "alias").Output()
But that still won't give you the answer because bash doesn't source
the .bashrc
file in that case so aliases won't be available in the subshell. You'll need the --rcfile
or --login
/-l
option and also need to specify the shell as interactive with -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")
would also possibly work depending on where your aliases are sourced. Other shells like zsh, sh, dash... may source different files with different options, so check your shell's documentation if -ic
or -lic
doesn't work
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论