[英]Change which python.exe to be used in bash script
假设python
将C:\\Program\\python.exe
作为标准引用,并且我有一个应该使用C:\\Program\\python_2.exe
运行的C:\\Program\\python_2.exe
。 如果我做
#!/bin/bash/
python=C:\Program\python_2.exe
python -c "print('Hello world!')" >log.txt 2>&1
它仍然使用标准的 python 而不是python_2
首先,让我们检查一下你的脚本实际上做了什么:
第一行,将值C:\\Program\\python_2.exe
给名为python
的变量:
python=C:\Program\python_2.exe
然而,下一行根本不使用这个变量。 它只会运行一个程序python
:
python -c "print('Hello world!')" >log.txt 2>&1
有趣的是,该程序与许多变量之一具有相同的名称,但这并不重要。 对于 shell,变量与程序名(它们是文字,在${PATH}
搜索)完全无关。
如果要为程序使用变量,则必须明确表示:
${python} -c "print('Hello world!')" >log.txt 2>&1
(
这仍然可能不起作用,因为 un*x 系统(和bash
来自该领域)上的反斜杠被认为是特殊的,所以${python}
变量实际上可能不包含您认为它的作用:
$ echo ${python}
C:Programpython_2.exe
所以你可能需要逃避反斜杠:
python="C:\\Program\\python_2.exe"
)
如果您不想使用变量来调用您的程序,而是使用文字python
,您可以定义一个函数:
#!/bin/sh
# this defines a *shell-function* named `python`, which can be used as if it were a program:
python() {
# call a program (python_2.exe) with all the arguments that were given to the function:
C:\\Program\\python_2.exe "$@"
}
# call the 'python' function with some args:
python -c "print('Hello world!')" >log.txt 2>&1
您可以尝试使用 scl enable 来启用 python 2.7 版:
cd /var/www/python/scripts/
scl enable python27 "python runAllUpserts.py >/dev/null 2>&1"
然后你可以使用:
python -V
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.