Bash:无法使用绝对路径执行perl脚本?

时间:2014-06-20 01:17:21

标签: perl bash

问题:我无法使用绝对路径运行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>

有谁知道为什么第一个例子不起作用?我很难过! 谢谢你的任何建议。

1 个答案:

答案 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脚本时,您必须在任何可能是最新的驱动器上执行此操作。