首页 > 解决方案 > Linux 如何从父目录执行 bash 脚本?

问题描述

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

./GenerateDTIPubSub --DTIFramePubSub

工作正常。

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

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

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

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

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

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

但是 perl 脚本的路径不仅仅改变 bash 文件路径

标签: linuxbashperl

解决方案


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

( cd cfg; ./GenerateDTIPubSub --DTIFramePubSub )

括号创建一个子shell,以避免更改进程以外的任何内容的当前工作目录perl


潜在的问题是GenerateDTIPubSub假设当前工作目录是脚本的目录。以下是有关如何解决此问题的说明。

  1. 快速而肮脏的方法:

    添加以下内容:

    use FindBin qw( $RealBin );
    BEGIN { chdir($RealBin); }
    
  2. 更明智的做法:

    首先,添加以下内容:

    use FindBin qw( $RealBin );
    

    然后更换

    "Scripts/DTIPubSub.pl"
    

    "$RealBin/Scripts/DTIPubSub.pl"
    

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


推荐阅读