我们正在尝试在go中实现一个程序,该程序从指定路径运行另一个go程序,例如
path, _ := exec.LookPath("program-name")
接下来,我们给出了一组go命令来运行go程序,例如
args := []string{"go", "install", "&&", "-port", "18000"}
我们将path和args与os.Environ()
一起传递给syscall.Exec()。为了运行我们正在调用的项目,有一个检查告诉我们-port是必需的。由于-port不是可执行命令,因此它不使用端口值。
要求是当我们键入go install && project-name -port 19000时,程序应运行。
查询可以通过任何方式实现,我们如何传递端口值以获得所需的结果。
答案 0 :(得分:2)
由于两个原因,这不起作用
args := []string{"go", "install", "&&", "-port", "18000"}
首先,“项目名称”丢失。我认为这是一个简单的错字。
第二,syscall Exec不使用外壳程序来启动命令。 &&
构造并从一行开始运行多个命令是shell的功能
要使syscall Exec做到这一点,您可以调用它,检查返回值,然后使用第二个命令再次调用它
或者您可以使用syscall Exec启动外壳程序。下面有一个例子
启动一个shell-(使用os / exec,但是在这种情况下,这非常相似)运行
两个带有&&
package main
import (
"fmt"
"os/exec"
)
func main() {
args := []string{"-c", "touch a && ls -l"}
cmd := exec.Command("bash", args...)
stuff, err := cmd.Output()
fmt.Printf("Command finished with error: %v", err)
fmt.Printf("%s", string(stuff))
}