一个常见的问题是"如果不在命令行上显式调用python,我如何使mypython脚本可执行?"答案是chmod +x
it,然后在脚本开头添加#!/usr/bin/env python
。
这不是我要问的问题。
我想做的是告诉bash、python或任何负责文件处理的人,将所有设置了执行位的.py文件视为一开始就有shebang,无论它们是否真的这样做。
我知道在Windows中可以做到这一点,显然在Gnome中,你可以双击GUI中的.py脚本。我本可以发誓,我记得听说过从shell指定处理程序的等效方法。
为什么我想知道如何做到这一点(如果真的可能的话):
- 并不是每个系统都使用shebang,我不想用它来混淆跨平台项目中的文件
- 如果我正在向一个我不拥有的项目提交补丁,为了自己的方便,把与补丁无关的东西放进去对我来说有点讨厌
谢谢。
你是说binfmt_misc吗?
binfmt_misc是Linux内核的一种功能,它允许识别任意可执行文件格式,并将其传递给某些用户空间应用程序,如模拟器和虚拟机。
所以您想向它注册一个条目,所以每次您想执行.py
文件时,内核都会将其传递给/usr/bin/python。
你可以试试类似的东西
# load the binfmt_misc module
if [ ! -d /proc/sys/fs/binfmt_misc ]; then
/sbin/modprobe binfmt_misc
fi
if [ ! -f /proc/sys/fs/binfmt_misc/register ]; then
mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
fi
echo ':Python:E::py::/usr/bin/python:' > /proc/sys/fs/binfmt_misc/register
如果您使用基于Debian的分发,则必须安装binfmt支持。
您可以将:Python:E::py::/usr/bin/python:
添加到/etc/binfmt.d/python.conf
中,使其在重新启动后永久存在。