在Go中启动定义为别名的终端命令

时间:2018-07-17 12:22:44

标签: bash go terminal alias

我正在Go中编写一个程序,该程序会发送一些命令。 我可以运行$ PATH中的任何命令。 我检查命令是否可以通过LookPath函数运行。

path, err := exec.LookPath("pwd")

,然后使用以下命令运行它:

func Run(command string, args []string) string {
    cmd := exec.Command(command, args...)

    output, err := cmd.CombinedOutput()
    if err != nil {
        logging.PrintlnError(fmt.Sprint(err) + ": " + string(output))
        return ""
    }
    return string(output)
}

Run("pwd", "")正在运行 但是,如果我使用别名,则无法使用。

例如,我的alias l='ls -lah'文件中有~/.bash_aliases,但是当我想在Go中运行该命令时,它将不起作用。

Run("l")不起作用。

我收到以下错误消息:

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

我也尝试使用另一种方法来运行一些别名命令。

func RunCmd(cmd string) string {
    out, err := exec.Command(cmd).Output()
    if err != nil {
        logging.PrintlnError("error occured")
        logging.PrintlnError(fmt.Sprint(err))
    }
    fmt.Printf("%s", out)

    return string(out)
}

但是效果不佳。

您知道我可以使用什么功能来启动在外壳程序中定义为别名的命令吗? 我尝试启动bash -c cmd,但不幸的是。

谢谢

1 个答案:

答案 0 :(得分:0)

如果要在~/.bashrc~/.bash_aliases文件中启动定义为别名的命令,则可以使用其他注释中描述的bash -c cmd命令。 但是,您必须在Go中以适当的方式实现它。 这是命令:

exec.Command("/bin/bash", "-c", "aliasCmd "+ _alias_arguments)

但是,您不应该让程序依赖于用户定义的别名。 ;-)