我有一个名为GenerateDTIPubSub的脚本,如果我使用终端(在同一文件位置打开的终端)从其文件位置调用它,则该脚本:
./ GenerateDTIPubSub --DTIFramePubSub
工作正常。
现在在上面的文件夹中时如何执行脚本?
示例:./cfg/GenerateDTIPubSub --DTIFramePubSub
哪个不起作用(提醒您我也在上面的文件夹中打开了终端)
edit:它执行但bash脚本执行,但是除非从其目录执行bash脚本(如果有此意义),否则找不到执行的perl脚本
./GenerateDTIPubSub --DTIFramePubSub
然后,GenerateDTIPubSub调用DTIFramePubSub函数,该函数调用perl脚本,此路径可以正常工作
./cfg/GenerateDTIPubSub --DTIFramePubSub
无效,找不到perl脚本
无法打开perl脚本“ Scripts / DTIPubSub.pl”:没有此类文件或目录
但是perl脚本的路径不会仅更改bash文件路径
答案 0 :(得分:2)
要变通解决此问题,您可以使用以下方法:
( cd cfg; ./GenerateDTIPubSub --DTIFramePubSub )
parens创建一个子shell,以避免为perl
进程以外的任何内容更改当前工作目录。
潜在的问题是GenerateDTIPubSub
假定当前工作目录是脚本的目录。以下是有关解决方法的说明。
快速而肮脏的方法:
添加以下内容:
use FindBin qw( $RealBin );
BEGIN { chdir($RealBin); }
更明智的方法:
首先,添加以下内容:
use FindBin qw( $RealBin );
然后替换
"Scripts/DTIPubSub.pl"
使用
"$RealBin/Scripts/DTIPubSub.pl"
您可能需要在代码中进行多个类似的修复。
答案 1 :(得分:1)
似乎您必须(临时)更改当前工作目录,然后再调用脚本。您可以使用以下技术来做到这一点
cd cfg && ./GenerateDTIPubSub --DTIFramePubSub
答案 2 :(得分:0)
问题是基本脚本中的Perl脚本的路径需要更改为包含/cgf