【问题标题】:BASH script look up in /usr/binBASH 脚本在 /usr/bin 中查找
【发布时间】:2016-05-24 11:32:18
【问题描述】:

我在我的 Linux 机器 2.6 和 2.7 上安装了两个版本的 python,如link 中所示我已经在/usr/local/bin/ 中安装了 python 2.7,并创建了别名并更新了 PATH 变量。 2.6 安装在 /usr/bin/ 中。

之后,当我检查 python 版本时,它在终端上显示 2.7.3,但在我运行 bash 脚本(需要检测 python 版本)时在同一终端上显示为 2.6。

我应该如何强制 bash 脚本引用别名或 /usr/local/bin 以选择正确的 python 版本。

【问题讨论】:

  • 请提供 bash 脚本
  • 默认情况下,您的脚本看起来像是在查看/usr/bin/python,它必须是一个符号链接。更新该链接以指向 2.7 目录,它应该全部设置好。
  • 我强烈推荐使用virtualenv
  • @Panch 您不需要在脚本文件中进行更改。只需像我显示的那样设置路径,然后运行脚本。
  • 这里是脚本# Validate the python installed if [[ $(python --version 2>&1) != *2\.7* ]]; then echo -e "$COL_RED Qt compile requires Python 2.7 $COL_RESET"; exit 1 else echo "Detected Python version 2.7" fi

标签: linux bash


【解决方案1】:

您的个人资料中有别名。但是,运行脚本时不会携带别名。

所以你需要做的是要么在脚本中的任何地方使用完整路径,要么在一开始就指明路径。

#!/bin/bash

PYTHON_PATH=/usr/local/bin
MY_PYTHON=$PYTHON_PATH/python2.7.3

然后这样称呼它:

$MY_PYTHON ... things

【讨论】:

  • 通常你会使用virtualenv来处理多个版本的python。
  • @hek2mgl 是的!甚至是码头工人。但是,在脚本的范围内,我不知道这样使用是否实用:脚本会运行活动 virtualenv 描述的 Python 吗?
  • 我会并且过去也这样做过,source /path/to/virtualenv_name 在脚本之上。一些基于 python 的程序,例如 uwsgi,甚至支持将 virtualenv 的路径作为启动选项
  • @hek2mgl 太棒了!然后我建议你发布这个想法作为答案。
  • 其实是source /path/to/virtualenv_name/bin/activate ...不,没关系,你的回答涵盖了this问题背后的东西。
【解决方案2】:

您需要更新 PATH。然后你可以像这样使用:

export PATH="/usr/local/bin:$PATH"

注意我在其他路径之前包括了 usr/local/bin 在它之前包含路径。将其包含在 ~/.bashrc 或 ~/.bash_profile 中,这样您就无需在每次打开新 shell 时都这样做。

【讨论】:

  • 我已经按照您的指示设置了我的 PATH 和 root 的 .bashrc。以下是我PATH# /usr/local/bin:/opt/rh/devtoolset-2/root/usr/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/panch/bin的回音。尽管如此,我还是遇到了我在最初问题中描述的那个案例。
  • @Panch 你的发行版是什么?我根本无法重现。
  • 我用rhel 6.7评估版。 The uname -r2.6.32-573.el6.x86_64
  • @Panch 你从 root 用户运行这个脚本?还是普通用户?
  • 我以root 用户身份运行它,并在根的.bashrc 中包含了别名
猜你喜欢
  • 1970-01-01
  • 2010-11-13
  • 2016-09-11
  • 2014-03-03
  • 2017-11-24
  • 1970-01-01
  • 2021-05-07
  • 2019-04-05
相关资源
最近更新 更多