GoLang中的exec bash shell函数?

时间:2018-03-01 23:41:53

标签: bash shell go

我们有大量的shell函数用于各种用途,这些函数被添加到我们的.bash_profiles中,我们每天都会使用它们。我们将函数称为常规二进制文件。

我试图从GoLang应用程序内部调用这些相同的shell函数,但它找不到它们,因为它显然在不同的上下文中运行,并且无法在我的$ PATH中找到它们。

错误是: exec: "finderx": executable file not found in $PATH

有没有人知道如何在与运行它的终端相同的上下文中从GoLang应用程序执行shell命令?或者如果可能的话,可能会重新提供一些我不想重新实施这些功能的方法 我想像脚本一样调用它们来缓解过渡期。我们将逐步将所有内容移至Go,但是现在,我们必须使用shell函数

2 个答案:

答案 0 :(得分:3)

我想你可以简单地调用bash -l -c 'your alias function'。 只需确保您的.bash_aliases或其他具有您的功能的点文件来自.bashrc(顺便提一下,应该来自.bash_profile,因为非交互式登录shell不会;阅读.bashrc)。

答案 1 :(得分:2)

创建一个可以运行命令行参数的包装器脚本。 例如:

<强> /home/user/run.sh

#!/bin/sh
source ~/.bash_profile
$1

<强> test.go

package main

import (
    "fmt"
    "os/exec"
)  

func main(){
    testCmd := exec.Command("/home/user/run.sh","func123")        
    testOut, err := testCmd.Output()
    if err != nil {
        panic(err)
    } 
    fmt.Println(string(testOut))
}