我们有大量的shell函数用于各种用途,这些函数被添加到我们的.bash_profiles中,我们每天都会使用它们。我们将函数称为常规二进制文件。
我试图从GoLang应用程序内部调用这些相同的shell函数,但它找不到它们,因为它显然在不同的上下文中运行,并且无法在我的$ PATH中找到它们。
错误是:
exec: "finderx": executable file not found in $PATH
有没有人知道如何在与运行它的终端相同的上下文中从GoLang应用程序执行shell命令?或者如果可能的话,可能会重新提供一些我不想重新实施这些功能的方法 我想像脚本一样调用它们来缓解过渡期。我们将逐步将所有内容移至Go,但是现在,我们必须使用shell函数
答案 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))
}