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

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

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

最佳答案 我试过上面的命令.如果目录丢失,我得到完全相同的错误.

在相应的mkdir之后,一切似乎都没问题.

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

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

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

点赞