Ubuntu下Shell脚本无法识别Python命令的问题求助
嘿,我来帮你捋捋这个问题~
首先得纠正你一个小误解:你在.bashrc里设置的PYTHONPATH是用来让Python解释器查找第三方模块的路径,和系统查找python这个可执行命令的路径完全没关系,这个设置解决不了当前的问题,甚至是多余的哦。
接下来说说为什么终端里能跑python,脚本里就不行:
Ubuntu 22.04默认只预装了python3,没有python这个原生命令。你手动在终端里能输入python运行,大概率是你之前在交互式shell里设置了别名(比如alias python=python3),或者自己创建了软链接,但别名只在交互式shell里生效,脚本运行的时候用的是非交互式shell,不会加载.bashrc里的别名配置,所以脚本自然找不到python命令。
给你几个实用的解决方法,按推荐优先级排序:
方法一(最推荐,符合Ubuntu规范):直接在脚本里用
python3代替python
修改你的脚本成这样:#!/bin/bash python3 hello.py因为Ubuntu系统里默认的Python3就是你用的3.10版本,这样最稳妥,也不会有环境依赖问题。
方法二(一劳永逸,适合习惯用
python命令的情况):给python3创建全局软链接
打开终端运行这个命令(需要sudo权限):sudo ln -s /usr/bin/python3 /usr/bin/python这样不管是交互式shell还是脚本里,输入
python都会指向系统自带的python3,以后就不用再纠结这个问题了。方法三(最直接,不依赖环境):在脚本里用Python的绝对路径
你可以先在终端里用which python3命令确认Python3的绝对路径(一般就是/usr/bin/python3),然后把脚本改成:#!/bin/bash /usr/bin/python3 hello.py这种方式完全不依赖环境变量,肯定能找到命令。
方法四(不推荐,可移植性差):让脚本加载别名配置
如果你的python是通过.bashrc里的别名实现的,可以在脚本开头加上这两行:#!/bin/bash shopt -s expand_aliases source ~/.bashrc python hello.py但这种方法不推荐,因为脚本的运行会依赖你的个人配置,换个机器可能就失效了。
最后可以验证下:你在终端里输入which python,如果输出是空的,就说明系统确实没有python这个命令;如果有输出,对比下脚本运行时的PATH(可以在脚本里加一行echo $PATH运行看看),看这个路径在不在里面。
备注:内容来源于stack exchange,提问作者Ogiad

