Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux如何从父目录执行bash脚本?_Linux_Bash_Perl - Fatal编程技术网

Linux如何从父目录执行bash脚本?

Linux如何从父目录执行bash脚本?,linux,bash,perl,Linux,Bash,Perl,我有一个名为generatedtisubsubsub的脚本,如果我使用终端(我在同一文件位置打开)从其文件位置调用它: ./GenerateDTIPubSub--DTIFramePubSub 很好 现在如何在上面的文件夹中执行脚本? 示例:/cfg/GenerateDTIPubSub--DTIFramePubSub 这不起作用(提醒您我也打开了上面文件夹中的终端) 编辑:它只执行bash脚本,但找不到它执行的perl脚本,除非bash脚本是从它的目录执行的(如果有意义的话) /GenerateD

我有一个名为generatedtisubsubsub的脚本,如果我使用终端(我在同一文件位置打开)从其文件位置调用它:

./GenerateDTIPubSub--DTIFramePubSub

很好

现在如何在上面的文件夹中执行脚本? 示例:
/cfg/GenerateDTIPubSub--DTIFramePubSub

这不起作用(提醒您我也打开了上面文件夹中的终端)

编辑:它只执行bash脚本,但找不到它执行的perl脚本,除非bash脚本是从它的目录执行的(如果有意义的话)

/GenerateDTIPubSub--DTIFramePubSub
GenerateDTIPubSub然后调用调用perl脚本的DTIFramePubSub函数,此路径工作正常

/cfg/GenerateDTIPubSub--DTIFramePubSub
这不起作用,它找不到perl脚本

无法打开perl脚本“Scripts/DTIPubSub.pl”:没有这样的文件或目录

但是perl脚本的路径并不仅仅更改bash文件路径,似乎在调用脚本之前必须(临时)更改当前工作目录。您可以使用以下技术来实现这一点

cd cfg && ./GenerateDTIPubSub --DTIFramePubSub
在调用脚本之前,似乎必须(临时)更改当前工作目录。您可以使用以下技术来实现这一点

cd cfg && ./GenerateDTIPubSub --DTIFramePubSub

问题是需要更改基本脚本中Perl脚本的路径以包含
/cgf

问题是需要更改基本脚本中Perl脚本的路径以包含
/cgf

要解决此问题,可以使用以下方法:

( cd cfg; ./GenerateDTIPubSub --DTIFramePubSub )
use FindBin qw( $RealBin );
BEGIN { chdir($RealBin); }
use FindBin qw( $RealBin );
paren创建一个子shell,以避免为
perl
进程之外的任何内容更改当前工作目录


根本问题是
generatedtisubsubsub
假定当前工作目录是脚本的目录。下面是关于如何修复该问题的说明

  • 快速而肮脏的方法:

    添加以下内容:

    ( cd cfg; ./GenerateDTIPubSub --DTIFramePubSub )
    
    use FindBin qw( $RealBin );
    BEGIN { chdir($RealBin); }
    
    use FindBin qw( $RealBin );
    
  • 更明智的做法是:

    首先,添加以下内容:

    ( cd cfg; ./GenerateDTIPubSub --DTIFramePubSub )
    
    use FindBin qw( $RealBin );
    BEGIN { chdir($RealBin); }
    
    use FindBin qw( $RealBin );
    
    然后替换

    "Scripts/DTIPubSub.pl"
    

    您可能需要在代码中执行多个类似的修复


  • 要解决此问题,可以使用以下方法:

    ( cd cfg; ./GenerateDTIPubSub --DTIFramePubSub )
    
    use FindBin qw( $RealBin );
    BEGIN { chdir($RealBin); }
    
    use FindBin qw( $RealBin );
    
    paren创建一个子shell,以避免为
    perl
    进程之外的任何内容更改当前工作目录


    根本问题是
    generatedtisubsubsub
    假定当前工作目录是脚本的目录。下面是关于如何修复该问题的说明

  • 快速而肮脏的方法:

    添加以下内容:

    ( cd cfg; ./GenerateDTIPubSub --DTIFramePubSub )
    
    use FindBin qw( $RealBin );
    BEGIN { chdir($RealBin); }
    
    use FindBin qw( $RealBin );
    
  • 更明智的做法是:

    首先,添加以下内容:

    ( cd cfg; ./GenerateDTIPubSub --DTIFramePubSub )
    
    use FindBin qw( $RealBin );
    BEGIN { chdir($RealBin); }
    
    use FindBin qw( $RealBin );
    
    然后替换

    "Scripts/DTIPubSub.pl"
    

    您可能需要在代码中执行多个类似的修复


  • /cfg/GenerateDTIPubSub--DTIFramePubSub
    不起作用吗?错误消息是什么?您的问题是什么?
    cfg
    是“上面的文件夹”中的文件夹吗?在这种情况下,您回答了自己的问题。您是否可以从不同的目录调用脚本在很大程度上取决于脚本在响应编辑时的编写方式:什么是不工作的?正如@NaN所说,我们需要错误消息。脚本本身是否引发异常?找不到吗?简短提醒:在Linux上,一般来说,文件名和文件夹名区分大小写。因此,如果您的文件夹拼写为
    Cfg
    ,这将解释为什么找不到脚本
    /Cfg/generatedtisubsubsub--DTIFramePubSub
    不起作用吗?错误消息是什么?您的问题是什么?
    cfg
    是“上面的文件夹”中的文件夹吗?在这种情况下,您回答了自己的问题。您是否可以从不同的目录调用脚本在很大程度上取决于脚本在响应编辑时的编写方式:什么是不工作的?正如@NaN所说,我们需要错误消息。脚本本身是否引发异常?找不到吗?简短提醒:在Linux上,一般来说,文件名和文件夹名区分大小写。因此,如果您的文件夹拼写为
    Cfg
    ,这将解释为什么找不到脚本