我们有大量用于各种用途的 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))
}