我正在交叉编译一个Go语言的程序,这个程序将执行bash脚本。是否可以将bash脚本嵌入到二进制文件中?
我参考了:Golang serve static files from memory
不确定这是否适用于执行bash脚本。我在这里错过了什么吗?一些澄清或指针将是非常有帮助的,谢谢!
我正在交叉编译一个Go语言的程序,这个程序将执行bash脚本。是否可以将bash脚本嵌入到二进制文件中?
我参考了:Golang serve static files from memory
不确定这是否适用于执行bash脚本。我在这里错过了什么吗?一些澄清或指针将是非常有帮助的,谢谢!
3条答案
按热度按时间wbgh16ku1#
由于
bash
可以执行来自stdin
的脚本,因此只需通过command.Stdin
将脚本发送到bash
命令。一个没有go
embed
的例子:随动1.16 x 1米5英寸(x 1米0英寸):
奖金
使用
-s -
向脚本传递参数。以下示例将
-la /etc
传递给脚本。Playground:https://go.dev/play/p/T1lMSrXcOIL
bwitn5fc2#
实际上,你可以直接与Go语言的系统shell接口。根据bash脚本的内容,你可以把所有的东西都转换成Go语言。例如,处理文件、提取归档文件、输出文本、请求用户输入、下载文件等等,都可以在Go语言中本地完成。对于任何你绝对需要shell来完成的事情,你都可以使用golang.org/pkg/os/exec。
我写了一个代码片段,演示了一个非常简单的Go语言命令shell。基本上,它通过管道在用户和shell之间传输输入、输出和错误。它可以交互使用,也可以直接运行大多数shell命令。我在这里提到它主要是为了演示Go语言的操作系统功能。看看这个:github.com/lee8oi/goshell.go
66bbxpm53#
您是否尝试过将流数据(根据参考资料go-bindata提供了一个返回[]byte的函数)写入临时文件?
参见:http://golang.org/pkg/io/ioutil/#TempFile
然后可以使用系统调用执行它
http://golang.org/pkg/syscall/#Exec
其中第一个参数必须是shell。