路径中子文件夹中的可执行文件

Executables in subfolder in path

我希望将我的可执行文件放在子文件夹中:

    $ tree
    .
    ├── bin
    │   ├── exec.py
    │   ├── method1
    │   │   ├── exec1.py
    │   │   └── exec2.py
    │   └── method2
    │       ├── exec1.py
    │       └── exec2.py

如果我在 PATH 中包含 bin/ 文件夹,有没有办法从我的 shell 脚本(在另一个目录中)访问可执行文件,例如

$ method1/exec1.py arg1 arg2

上面的命令报错(No such file or directory),但是

$ exec.py arg1 arg2

有效,因为它不在子文件夹中。

请告知我如何在子文件夹中组织可执行文件。谢谢

如记录 here 所述,bash shell(可能还有大多数其他 shells)仅在 $PATH 上查找命令,如果命令名称不包含斜线。

您可以通过多种方式解决问题:

  1. 您可以为命令创建一个包含 symbolic links 的文件夹,并将该文件夹添加到 $PATH。
  2. 您可以将子文件夹添加到 $PATH。如果有很多子文件夹你可以do it automatically
  3. 您可以将脚本当前目录更改为您的 bin。临时更改当前目录的一种简单方法是 use subshells.
  4. 当然,您可以尝试使用不同的 shell 来执行不同的命令搜索。抱歉,但我不知道在哪里可以找到它,如果您真的需要它,您必须 google 自己动手。

感谢@Андрей Беньковский 的详尽回答。了解命令名称不应包含斜杠很有用。由于我对不同的方法有相同的 exec 文件名,所以我无法将它们放在一起。我的解决方案是使用变量 BINROOT=bin/ 并使用

调用命令
    $BINROOT/method1/exec1.py arg1 arg2