导航到可执行文件的相对路径 bash

Navigate to a executable relative path bash

所以我了解了Linux中相对路径的基础...

但是如果我想 运行 相对于父文件夹的可执行文件 (./exeToRun) 怎么办?我使用三个点吗?

例子

文件结构

project
│   README.md
│   file001.txt    
│
└───folder1
│   │   exeToRun
│   │   file012.txt
│   │
│   └───subfolder1
│       │   myScript.py
│       │   file112.txt
│       │   ...
│   
└───folder2
    │   file021.txt
    │   file022.txt

如果我想从 myScript.py 调用 ./exeToRun 可执行文件,相对而言,我会假定语法为 .../folder1/exeToRun。两个点是因为它是相对于父文件夹的,一个点是因为它是可执行文件。

现在我知道这是不正确的,但我正在寻找有关如何正确实现此功能的一些说明。

您将使用两个点 (../exeToRun);没有额外的“点,因为它是可执行文件”,这只是一条普通路径。

./exeToRun 的通常情况下,单点仅表示“在当前文件夹中”,与文件是否可执行无关。需要它的原因是因为如果命令不包含显式路径(即至少一个“/”),系统将在 $PATH 的各种二进制文件目录中查找它(即 /bin,/usr/bin, 等等);将 ./ 放在可执行文件名称之前,通过明确地说“在当前目录中...”来覆盖它。

但是,当您像这样使用 ... 时,它们是相对于进程的当前工作目录的,这不一定是您的脚本所在的目录。如果您 cd 进入脚本的目录并 运行 它与 ./scriptname,然后是的它将是脚本的目录,但如果你在其他地方并且 运行 脚本的路径...然后脚本的工作目录将是您 运行 脚本时碰巧所在的任何地方。

如果你想运行相对于脚本目录的可执行文件,你需要先找到脚本目录,这并不总是那么容易(甚至不可能) ).参见 "How can I get the source directory of a Bash script from within the script itself?" and BashFAQ #28: How do I determine the location of my script?