gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:27 24 4
gpt4 key购买 nike

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

./GenerateDTIPubSub --DTIFramePubSub

工作正常。

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

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

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

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

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

Can't open perl script "Scripts/DTIPubSub.pl": No such file or directory

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

最佳答案

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

( cd cfg; ./GenerateDTIPubSub --DTIFramePubSub )

parens 创建了一个子 shell 来避免为 perl 进程之外的任何东西改变当前工作目录。


根本问题是 GenerateDTIPubSub 假定当前工作目录是脚本的目录。以下是有关如何解决该问题的说明。

  1. 快速而肮脏的方法:

    添加以下内容:

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

    首先,添加以下内容:

    use FindBin qw( $RealBin );

    然后替换

    "Scripts/DTIPubSub.pl"

    "$RealBin/Scripts/DTIPubSub.pl"

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

关于Linux 如何从父目录执行 bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51839680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com