.py 中的单字命令(无别名)

Posted

技术标签:

【中文标题】.py 中的单字命令(无别名)【英文标题】:One-word-command from .py (without aliases) 【发布时间】:2015-12-31 23:42:07 【问题描述】:

一些程序可以在任何地方用一个单词命令执行。这方面的一个例子是 youtube-dl,它是一个 python 程序,可以使用简单的命令 youtube-dl [input] 执行。据我了解,这仅仅是因为存在一个名为/usr/bin/youtube-dl 的文件,而/usr/bin 在PATH 中。但是,我不明白自己必须做些什么才能制作这样的东西。现在,我有一个名为testproject 的python 项目,其中包括一个这样的python 程序: ~/testproject/files/myownprogram.py

我必须做些什么才能使其成为二进制可执行文件,例如 youtube-dl?

我知道我可以创建一个alias mop="python ~/testproject/files/myownprogram.py",这也是我所做的,而且效果很好。也就是说,我可以写$ mop,并成功运行我的程序。 但是为了好奇和学习,我想知道如何制作一个文件,例如/usr/bin/youtube-dl 文件,从而消除对别名的需求。

我发现很难在搜索引擎中找到有关信息... 任何帮助是极大的赞赏! :-)

编辑:

我的问题与标记为重复的问题不同,因为我不希望将其作为 .sh 脚本执行。我只是想将它作为一个无后缀的单字命令执行,类似于/usr/bin 中的所有其他可执行文件。 :-)

例如:$ myown 应该运行我的程序,而不需要别名或在提示符处写入“.sh”或“.py”。也就是说,我想要一个文件/usr/bin/myown,它可以通过简单的命令myown从任何地方以某种方式运行我的testproject

【问题讨论】:

Shell Script: Execute a python program from within a shell script的可能重复 如您所说...您需要将脚本放在$PATH 中的文件夹中。 所以我必须为每个项目添加一个新文件夹到 $PATH 吗?这不会让我的 $PATH 很长而且......在几个项目之后不切实际吗?我在/usr/bin 文件夹中有很多可执行文件。我可以以某种方式将我的项目放在那里,从而避免向 $PATH 添加新文件夹吗? 【参考方案1】:

应用程序正在“从任何地方”执行,因为系统有一个特定的层次结构来查找这些文件(当前目录,然后是系统路径)。因此,它知道查看/usr/bin,因为那在您的系统路径中。

为了确保它在执行时使用python,您应该在文件顶部添加以下内容(查看一些python应用程序源代码,您会看到这一点):

#!/usr/bin/env python

这告诉系统使用系统“python”命令执行脚本。

【讨论】:

感谢您的回复,并感谢您确认我对 PATH 的想法。我的文件已经是可执行的,并且如上所述,当我运行完整路径或我创建的别名时可以正常工作。但是,(据我所知)我无法在不使用别名的情况下运行短命令。非常具体地说,我想知道 youtube-dl 是如何在 /usr/bin 中创建无后缀文件的,这使得这成为可能。我该怎么做? Unix 不关心文件名或扩展名;它关心文件是否被标记为可执行文件,并且在脚本的情况下,是否存在正确的 shebang (#!) 行。如果这两个都存在,您可以随意调用该文件,它会运行。这就是 youtube-dl 运行的原因,即使它是 Python 脚本。

以上是关于.py 中的单字命令(无别名)的主要内容,如果未能解决你的问题,请参考以下文章

bash脚本中的大写命令别名?

bash 别名中的多个命令

找不到 discord.py 命令

如何在别名中的 awk 命令中转义字段变量?

Windows 命令提示符中的别名

SSIS 中的别名参数