如何执行 bash 外壳功能



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

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

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

有谁知道如何在与运行终端相同的上下文中从Go应用程序执行shell命令? 或者也许重新获取它们,如果可能的话,我不想重新实现这些功能。
我想像从脚本中调用它们一样调用它们,以缓解过渡期。 我们将逐步将所有内容转移到 Go 上,但现在,我们必须接受 shell 函数。

我想你可以简单地调用bash -l -c 'your alias function'.只要确保你的.bash_aliases或带有函数的另一个点文件来自.bashrc(顺便说一下,它应该来自.bash_profile,因为非交互式登录 shell 不会读取.bashrc(。

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

/

首页/用户/运行.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))
}

最新更新