从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
答案 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
两条评论:
shell的if
语句使用if
后面的命令的退出代码。测试命令(如[[...]]
和[...]
)可用于设置退出代码。但是,if
并不需要它们。可以使用任何设置退出代码的命令。在这种情况下,grep
会根据是否找到字符串来设置退出代码。
-q
的{{1}}选项使其沉默。使用此选项,grep
设置退出代码,但不会产生任何其他输出。
这里,grep
在脚本的shell中运行,而不是子shell。因此,只要它可用于您的脚本,它就可以在这里工作,无需导出。