linux - Linux 如何从父目录执行 bash 脚本?
问题描述
我有一个名为 GenerateDTIPubSub 的脚本,如果我使用终端从其文件位置调用它(我在同一文件位置打开):
./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 )
括号创建一个子shell,以避免更改进程以外的任何内容的当前工作目录perl
。
潜在的问题是GenerateDTIPubSub
假设当前工作目录是脚本的目录。以下是有关如何解决此问题的说明。
快速而肮脏的方法:
添加以下内容:
use FindBin qw( $RealBin ); BEGIN { chdir($RealBin); }
更明智的做法:
首先,添加以下内容:
use FindBin qw( $RealBin );
然后更换
"Scripts/DTIPubSub.pl"
和
"$RealBin/Scripts/DTIPubSub.pl"
您可能需要在代码中进行多个类似的修复。
推荐阅读
- python - 如何将两个字典与同一列表中的不同键合并?
- c# - 一些 C# 在静态中编写乘法代码
- elasticsearch - How to exclude asterisks while searching with analyzer
- html - Trying to rewrite a html container with grid, to flexbox
- c# - 相关方法的通用方法调用
- python - python - 仅当目标中不存在文件时,如何将文件从一个目录复制到另一个目录?
- azure - 如何在没有 Azure 堆栈的情况下通过 API/CLI 创建新的目录租户?
- angular - Angular,2个模块的错误声明,如何解决?
- objective-c - How to access and initialize components of simd types?
- spring - WebSecurityConfig http.logout().addLogoutHandler 不工作