我在Windows 7机器上的Cygwin工作。我将Cygwin perl与windows strawberry perl联系起来。
10:13 PM Thu Jan 14$ ls -ltr /usr/bin/perl
lrwxrwxrwx 1 casper None 40 Nov 29 21:40 /usr/bin/perl -> /cygdrive/c/strawberry/perl/bin/perl.exe
我有一个接受命令行参数的脚本。当我放入目录路径时,它无法读取文件。
casperw@W01B6XLV /cygdrive/c/casper/DEV$ ./parseCMTA /tmp/example.txt
Error opening /tmp/example.txt - No such file or directory
我将它复制到脚本所在的相同路径,它可以正常工作:
casperw@W01B6XLV /cygdrive/c/casper/DEV$ cp /tmp/example.txt .
casperw@W01B6XLV /cygdrive/c/casper/DEV$ ./parseCMTA example.txt
Short name – ORANGEJulius
GL- 7512522 ADP- 20692677
GL- 7512524 ADP- 21692677
CMTA TO MS 050
casperw@W01B6XLV /cygdrive/c/casper/DEV$ cat parseCMTA
#!/usr/bin/perl
use strict ;
use warnings ;
my $file_grab = $ARGV[0] ;
open my $CMTA_file , '<' , $file_grab or die "Error opening $file_grab - $!\n";
while (<$CMTA_file>) {
print $_ ;
}
为什么命令行数组@ARGV不会处理文件位置的绝对路径,但是当文件位于同一目录时它将处理该文件。绝对路径和@ARGV数组发生了什么?
答案 0 :(得分:2)
草莓Perl尚未与Cygwin编译,随后/tmp
实际上是C:\tmp
而不是Cygwin中的空格。因此,假设您给Strawberry Perl的任何路径都是正常的Windows路径(我相信/
和\
在Strawberry Perl路径中是相同的)。如果您知道Windows中Cygwin /tmp
的位置,您可以使用它。