Fih*_*hop 0 shell perl command
我用Google搜索了一种做这种事情的方法.
我用这个shell命令:
perl -I/p2 maxconnect4.p1 arg1 arg2 arg3 arg4
Run Code Online (Sandbox Code Playgroud)
我的pl文件和pm文件都在"p2"目录中.
但是,它给了我一个错误:
Can't open perl script "maxconnect4.pl": No such file or directory
Run Code Online (Sandbox Code Playgroud)
有谁能解释为什么?
你有两个问题:
-I不适用于在命令行上指定的文件,仅适用于使用require或加载的模块use.
你不应该使用相关目录-I.如果您的脚本执行了chdir,那么该目录现在相对于新的当前目录,而不是脚本启动时的当前目录.(在许多情况下,您可以放弃违反此规则,因为大多数情况下,模块在脚本启动时加载,然后才更改目录.)
而且你实际上并没有使用相对目录,因为你说-I/p2,这意味着查看一个名为的目录/p2,而不是在p2当前目录中命名的子目录中(这就是你想说的).
尝试:
perl -I$PWD/p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4
Run Code Online (Sandbox Code Playgroud)
(假设您使用的是Unix类型的shell).
在许多情况下,更好的解决方案是@INC自动设置脚本.在顶部p2/maxconnect4.pl(在加载任何模块之前p2,放入):
use FindBin;
use lib $FindBin::Bin;
Run Code Online (Sandbox Code Playgroud)
use lib是-I交换机的编程版本,FindBin告诉您的脚本它所在目录的路径名.然后你可以说:
perl p2/maxconnect4.pl arg1 arg2 arg3 arg4
Run Code Online (Sandbox Code Playgroud)
而不必费心-I.