为什么Perl system()会破坏重定向路径?

时间:2012-12-24 10:42:52

标签: perl unicode

我在使用的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设置为其他用途。相同的命令在路径中使用拉丁字符正确运行。

为什么重定向的输出路径被破坏?

1 个答案:

答案 0 :(得分:2)

我完全按照上面的命令。如果目录丢失,我得到完全相同的错误。 在相应的mkdir之后,一切似乎都很好。

该命令不会在您的情况下运行,因为perl启动一个sh,它首先尝试设置重定向,然后启动连接到准备好的重定向的命令。 - 在您的情况下,sh无法准备重定向,因此无法启动实际命令。

正如你所说“输出路径已经存在”,但perl说“目录不存在”,你们似乎都在谈论不同的路径。

尝试从perl中获取mkdir或ls输出路径。然后你应该能够看到发生了什么。