用参数调用bash函数并通过grep传递结果

时间:2015-10-09 21:57:12

标签: bash

从bash脚本,我想测试是否存在virtualenv(dev

lsvirtualenv -b | grep dev

lsvirtualenv是作为bash函数实现的(-b给出了一个简短的列表,其中只包含已知的virtualenv名称,每个名称都在一个单独的行上。)

我试过

if [[ $(lsvirtualenv -b | grep ${VENV_NAME}) ]]; then
    echo "HAVE ${VENV_NAME}"
else
    echo "VENV ${VENV_NAME} missing"
fi

但是这给了我

lsvirtualenv: command not found

1 个答案:

答案 0 :(得分:2)

由于grep会创建有用的返回代码,因此无需使用[[...]]。尝试:

. /path/to/virtualenvwrapper.sh
if lsvirtualenv -b | grep -q "${VENV_NAME}"
then
    echo "HAVE ${VENV_NAME}"
else
    echo "VENV ${VENV_NAME} missing"
fi

两条评论:

  1. shell的if语句使用if后面的命令的退出代码。测试命令(如[[...]][...])可用于设置退出代码。但是,if并不需要它们。可以使用任何设置退出代码的命令。在这种情况下,grep会根据是否找到字符串来设置退出代码。

  2. -q的{​​{1}}选项使其沉默。使用此选项,grep设置退出代码,但不会产生任何其他输出。

  3. 这里,grep在脚本的shell中运行,而不是子shell。因此,只要它可用于您的脚本,它就可以在这里工作,无需导出。