问题:我无法使用绝对路径运行perl脚本。我可以用相同的路径列出它,但只在使用相对路径时执行它!
我的Cygwin终端的输出会使这个问题显而易见
这里我尝试用绝对路径执行脚本 - 它失败了:
LPI@Reboot /cygdrive/c/Users
$ /cygdrive/c/Users/LPI/3DSiteSoftware/Code/Scripts/path_name.pl
Can't open perl script "/cygdrive/c/Users/LPI/3DSiteSoftware/Code/Scripts/path_name.pl": No such file or directory
在这里,我使用相同的绝对路径列出它 - 它工作,文件在那里:
LPI@Reboot /cygdrive/c/Users
$ ls /cygdrive/c/Users/LPI/3DSiteSoftware/Code/Scripts/path_name.pl
/cygdrive/c/Users/LPI/3DSiteSoftware/Code/Scripts/path_name.pl
这里我尝试使用相对于我当前目录/ cygdrive / c / Users的路径执行它:
LPI@Reboot /cygdrive/c/Users
$ LPI/3DSiteSoftware/Code/Scripts/path_name.pl
USAGE: LPI/3DSiteSoftware/Code/Scripts/path_name.pl -p|-n <string>
有谁知道为什么第一个例子不起作用?我很难过! 谢谢你的任何建议。
答案 0 :(得分:3)
我猜你正在使用非Cygwin版本的Perl(如Strawberry Perl或ActivePerl),它对/cygdrive/
路径一无所知。您可以通过运行perl -v
来确认这一点。如果它显示built for MSWin32
那么它不是Cygwin Perl。
所以当你运行
/cygdrive/c/Users/LPI/3DSiteSoftware/Code/Scripts/path_name.pl
Bash运行
perl.exe /cygdrive/c/Users/LPI/3DSiteSoftware/Code/Scripts/path_name.pl
但是Perl正在寻找
C:/cygdrive/c/Users/LPI/3DSiteSoftware/Code/Scripts/path_name.pl
并且找不到它。
运行时
LPI/3DSiteSoftware/Code/Scripts/path_name.pl
Bash运行
perl.exe LPI/3DSiteSoftware/Code/Scripts/path_name.pl
Perl将其与您当前的C:\Users
目录相结合,并获取
C:\Users\LPI/3DSiteSoftware/Code/Scripts/path_name.pl
(Perl并不关心Windows上的混合斜杠)。
最简单的解决方案可能只是安装Cygwin的Perl版本,它将理解Cygwin路径。或者您可以编写某种垫片perl
,将脚本名称转换为Windows路径并调用真实的perl.exe
。
另一种可能性是使用NTFS symbolic links在每个卷上创建/cygdrive
目录(即创建C:\cygdrive
目录,并使C:\cygdrive\c
符号链接到C:\
,C:\cygdrive\d
D:\
的符号链接等)。但是,当您调用Perl脚本时,您必须在任何可能是最新的驱动器上执行此操作。