Golang exec:stat:在文件被移到那里之后,并没有这样的文件或目录



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

cpInit = exec.Command("cp", "initScripts/nginx", "/etc/init.d/nginx")

和另一个:

startNginx = exec.Command("/etc/init.d/nginx", "start")

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

exec: "/etc/init.d/nginx": stat /etc/init.d/nginx: no such file or directory

但当程序退出时,/etc/init.d/nginx就在那里,所以我认为第一个命令可能没有完成(即使Run()等待命令返回)。我把Run()改成了Start()Wait(),只是得到了相同的结果。有人能告诉我为什么第二个命令找不到那个文件吗?

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

关于Command的定义,请参见此处:http://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()之后。

最新更新