路径中子文件夹中的可执行文件
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 上查找命令,如果命令名称不包含斜线。
您可以通过多种方式解决问题:
- 您可以为命令创建一个包含 symbolic links 的文件夹,并将该文件夹添加到 $PATH。
- 您可以将子文件夹添加到 $PATH。如果有很多子文件夹你可以do it automatically
- 您可以将脚本当前目录更改为您的 bin。临时更改当前目录的一种简单方法是 use subshells.
- 当然,您可以尝试使用不同的 shell 来执行不同的命令搜索。抱歉,但我不知道在哪里可以找到它,如果您真的需要它,您必须 google 自己动手。
感谢@Андрей Беньковский 的详尽回答。了解命令名称不应包含斜杠很有用。由于我对不同的方法有相同的 exec 文件名,所以我无法将它们放在一起。我的解决方案是使用变量 BINROOT=bin/ 并使用
调用命令
$BINROOT/method1/exec1.py arg1 arg2
我希望将我的可执行文件放在子文件夹中:
$ 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 上查找命令,如果命令名称不包含斜线。
您可以通过多种方式解决问题:
- 您可以为命令创建一个包含 symbolic links 的文件夹,并将该文件夹添加到 $PATH。
- 您可以将子文件夹添加到 $PATH。如果有很多子文件夹你可以do it automatically
- 您可以将脚本当前目录更改为您的 bin。临时更改当前目录的一种简单方法是 use subshells.
- 当然,您可以尝试使用不同的 shell 来执行不同的命令搜索。抱歉,但我不知道在哪里可以找到它,如果您真的需要它,您必须 google 自己动手。
感谢@Андрей Беньковский 的详尽回答。了解命令名称不应包含斜杠很有用。由于我对不同的方法有相同的 exec 文件名,所以我无法将它们放在一起。我的解决方案是使用变量 BINROOT=bin/ 并使用
调用命令 $BINROOT/method1/exec1.py arg1 arg2