如何使用全局变量在bash中执行外部程序?

时间:2017-04-17 14:35:40

标签: bash

我想我之前已经问过这个问题,但是我找不到以前的问题。

所以,让我说我有一个python脚本helloPython.py,它打印一些东西。现在我想在bash脚本中调用该脚本,可以完成like this。到目前为止一切都很好。
但是,正确的python路径并不总是在PATH中找到的第一个python可执行文件,因此我声明了一个包含默认路径的全局变量,并且a read in function允许用户为自定义路径提供自定义路径。 python可执行文件。

详细说明,这是我的代码:

#!/bin/bash
PYTHON="/usr/bin/python" #default address

function helloPython {
    return PYTHON helloPython.py;
}

function readin {
    ## Read in the options
    for i in "$@"
    do
    case $i in
        -p=*|--python=*)
        PYTHON="${i#*=}"
        shift
        ;;
        *)

        ;;
    esac
    done
}

readin
helloPython

这给出:" return:PYTHON:需要数字参数" 或者,return $(PYTHON helloPython.py);给出" PYTHON:命令未找到"并且return $($(PYTHON) checkPythonVersion.py);给出" PYTHON:找不到命令\ n checkPythonVersion.py:找不到命令"

所以现在我的问题是:如何以可以从bash中执行python脚本的方式使用全局变量PYTHON?

2 个答案:

答案 0 :(得分:1)

您可以简化脚本:

#!/bin/bash
PYTHON="/usr/bin/python"
for i in "$@"
do
  case $i in
    -p=*|--python=*)
      PYTHON="${i#*=}"
      shift
      ;;
  esac
done
"$PYTHON" helloPython.py

一些注意事项:

  • 您的初始脚本在"$@"函数中使用readin,但在不提供参数的情况下调用此函数。在这种情况下,您应该按以下方式编写命令,以允许调用上下文中的所有参数按原样传递: readin "$@"
  • 使用函数在使用从调用上下文继承的变量时执行单个命令在技术上是有效的,但增加了一些复杂性,除非它是一个可以重用的函数,否则可能是最好的。

答案 1 :(得分:0)

不要return,只需执行命令:

helloPython() {
    "${PYTHON}" helloPython.py;
}

return告诉函数自己的退出代码,在这种情况下,它不是你需要的。