繁体   English   中英

更改要在 bash 脚本中使用的 python.exe

[英]Change which python.exe to be used in bash script

假设pythonC:\\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM