Golang exec:stat:文件移动到那里后没有这样的文件或目录

Cha*_*ews 4 deployment init.d go stat

我有一个脚本,用于使用“os/exec”包进行部署。我使用的命令之一如下:

cpInit = exec.Command("cp", "initScripts/nginx", "/etc/init.d/nginx")
Run Code Online (Sandbox Code Playgroud)

另一个:

startNginx = exec.Command("/etc/init.d/nginx", "start")
Run Code Online (Sandbox Code Playgroud)

最初我使用 运行第一个命令err := cpInit.Run(),但后来当我运行第二个命令时出现错误:

exec: "/etc/init.d/nginx": stat /etc/init.d/nginx: no such file or directory
Run Code Online (Sandbox Code Playgroud)

但是当程序退出/etc/init.d/nginx时,所以我想也许第一个命令没有完成(即使Run()等到命令返回)。我更改Run()Start()并且Wait()只是为了得到相同的结果。谁能告诉我为什么第二个命令找不到该文件?

Eve*_*man 5

当您运行时,exec.Command(...)它会立即检查文件是否存在,但必须将错误推迟到您调用 时Run(),因为该Command()调用不会返回错误。

请参阅此处的定义Commandhttp://golang.org/src/pkg/os/exec/exec.go ?s=3410:3455#L99

它调用LookPath(...)此处定义:http://golang.org/src/pkg/os/exec/lp_unix.go ?s=902:944#L23

Command您需要在知道文件存在后进行初始化- 在Run()调用复制命令后。