2012-12-24 58 views
4

我有一個Perl腳本以下命令我使用的是:爲什麼Perl系統()會破壞重定向路徑?

system ("mycommand /home/tahoar/ไมโคร_tm-อังกฤษ-ไทย/giza.อังกฤษ-ไทย/อังกฤษ-ไทย.A3.final.part*>/home/tahoar/ไมโคร_tm-อังกฤษ-ไทย/giza.อังกฤษ-ไทย/อังกฤษ-ไทย.A3.final") 

命令失敗,此錯誤:

sh: cannot create /home/tahoar/ไมโคร_tm-อัง��ฤษ-ไทย/giza.อัง��ฤษ-ไทย/อัง��ฤษ-ไทย.A3.final: Directory nonexistent 

我的故障排除已確定「mycommand的」永遠不會執行。它也發生在各種其他命令(mycommand1,mycommand2等)上。命令字符串是UTF-8。預期的輸出路徑已經存在。我已將LC_ALL = C設置爲其他用途。相同的命令在路徑中以拉丁字符正確運行。

爲什麼重定向輸出路徑被破壞?

+2

你是否在程序的開頭使用了utf8? – Borodin

回答

2

我試過上面的命令。如果目錄不存在,我會得到完全相同的錯誤。 經過相應的mkdir後,一切似乎都很好。

由於perl啓動了一個sh,它首先嚐試設置重定向,然後啓動連接到準備好的重定向的命令,但該命令並未運行。 - 在您的情況下,sh無法準備重定向,因此無法啓動實際的命令。

正如你所說「輸出路徑已經存在」,但perl說「目錄不存在」,你們似乎都在談論不同的路徑。

嘗試mkdir或ls從perl內的輸出路徑。那麼你應該能夠看到發生了什麼。

+0

是的,它看起來像'sh'命令正在接收損壞的字符串。 Perl腳本中的另一個命令調用「mkdir」並創建正確的輸出路徑。我相信這個問題的核心是Perl爲什麼只在它作爲重定向輸出出現時纔會破壞字符串? – tahoar

+0

它不。在Perl中,它只是一個字符串,它是給sh的。 Perl不知道字符串的某個部分是重定向。可能只有一些奇怪的轉換會破壞事情 – michas

+0

當你執行'mkdir $ path; ls -la $ path;在perls系統調用中echo echo> $ path/foo'?文件系統上的路徑是否正確創建?是能夠寫入該目錄的回顯?如果不是真的很奇怪。 ;) – michas