[英]How to avoid replacing my specific path to absolute path from 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/~
?
從Perl的exec
函數的文檔中:
如果LIST中有多個參數,或者LIST是具有多個值的數組,請使用LIST中的參數調用execvp(3)。 如果只有一個標量參數或其中包含一個元素的數組,則會檢查該參數是否包含shell元字符,如果有,則將整個參數傳遞給系統的命令shell進行解析(這是/ bin / sh-在Unix平台上為c,但在其他平台上有所不同)。
由於您將單個參數傳遞給exec
,因此命令將由命令外殼執行。 您的Perl版本似乎使用了MinGW Shell,它顯然在進行某些路徑替換。 要繞過外殼並直接執行命令,請嘗試:
exec('adb', 'push', $from, $to);
Miller的評論回答了我的問題,但我不能接受評論作為解決方案,所以我自己回答。 感謝米勒:-)
我嘗試了下面的代碼,它可以工作:
$from = "c:\Users\sy\a.jpg";
$path = '/sdcard/DCIM/'
$to = "a.jpg";
print "adb push $from -> $path$to";
exec("adb push $from $path$to");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.