如何使用Cygwin在perl脚本中运行系统命令

时间:2013-11-04 17:06:36

标签: perl unix cygwin spawn

我正在尝试在Cygwin中实现一个perl脚本。该脚本在其中进行了几个不同的调用。例如,

system "C:\\users\\program.exe"; 

exec("C:\\users\\program.exe");

当我尝试在cygwin中运行它时,它会给我错误:

sh: C:cygwin64cygdriveprogram.exe: command not found

我知道这是一个愚蠢的问题,但是如何让它找到program.exe?如果我查看cygwin终端中的目录,那么program.exe显然就在那里......

一旦我找到该程序,我想在新的cygwin终端中生成新进程。

3 个答案:

答案 0 :(得分:4)

使用Unix文件分隔符和/cygdrive/c/虚拟驱动器:

system "/cygdrive/c/users/program.exe"; 

exec("/cygdrive/c/users/program.exe")

答案 1 :(得分:2)

 exec("C:\\users\\program.exe");

执行bourne shell命令

 C:\users\program.exe

这是一种奇怪的写作方式

 C:usersprogram.exe

执行以下shell命令可能有效:

 C:\\users\\program.exe           # exec("C:\\\\users\\\\program.exe");

但正确的路径是

 /cygdrive/c/users/program.exe    # exec("/cygdrive/c/users/program.exe")

答案 2 :(得分:2)

TMTOWTDI:

#! /usr/bin/env perl

use strict;
use warnings;

my @cmd = ("/c", "echo", "hi" );

system('C:\\Windows\\System32\\cmd.exe',       @cmd) == 0 or die;
system('C:/Windows/System32/cmd.exe',          @cmd) == 0 or die;
system('/cygdrive/c/Windows/System32/cmd.exe', @cmd) == 0 or die;

chomp(my $cmd = `cygpath 'C:\\Windows\\System32\\cmd.exe'`);
system($cmd, @cmd) == 0 or die;