簡體   English   中英

如何避免將我的特定路徑從Perl替換為絕對路徑?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM