如何避免将我的特定路径替换为Perl的绝对路径?

时间:2014-04-01 09:05:24

标签: perl

您好我在Windows上编写如下的Perl脚本:

$from = "c:\Users\sy\a.jpg";
$to = "/sdcard/DCIM/a.jpg";
print "adb push $from -> $to";
exec("adb push $from $to");

结果:

adb push c:\Users\sy\a.jpg -> /sdcard/DCIM/a.jpg
failed to copy 'c:/Users/sy/a.jpg to 'c:/MinGW/msys/1.0/sdcard/DCIM/a.jpg' : No such file or directory

为什么$to路径会自动更改为c:/MinGW/msys/1.0/~

2 个答案:

答案 0 :(得分:0)

来自Perl的exec函数的文档:

  

如果LIST中有多个参数,或者LIST是一个具有多个值的数组,则使用LIST中的参数调用execvp(3)。如果只有一个标量参数或一个包含一个元素的数组,则检查参数是否为shell元字符,如果有,则将整个参数传递给系统的命令shell进行解析(这是/在Unix平台上使用bin / sh -c,但在其他平台上有所不同。)

由于您将单个参数传递给exec,因此该命令由命令shell执行。您的Perl版本似乎使用MinGW shell,它显然会进行一些路径替换。要绕过shell并直接执行命令,请尝试:

exec('adb', 'push', $from, $to);

答案 1 :(得分:0)

Miller's comment回答了我的问题,但我不能接受评论作为解决方案,所以我自己回答。 感谢米勒: - )

我尝试了下面的代码并且有效:

$from = "c:\Users\sy\a.jpg";
$path = '/sdcard/DCIM/'
$to = "a.jpg";
print "adb push $from -> $path$to";
exec("adb push $from $path$to");