Shell脚本无法将python -V输出存入变量的问题求助
这问题我碰到过!核心原因是**python -V的版本信息是输出到标准错误(stderr)而非标准输出(stdout)**,所以你用$(...)做命令替换的时候根本捕获不到内容,反而直接把版本信息打印到终端了——这就是你看到python -V直接输出Python 2.7.15的原因。
给你两种解决办法,选哪种都可以:
方法1:重定向stderr到stdout
把python -V的错误输出重定向到标准输出,这样命令替换就能捕获到版本信息了:
theme_python_prompt () { if [ -v VIRTUAL_ENV ]; then local VERSION="$(python -V 2>&1)" echo -n "%{$fg[yellow]%}%{$reset_color%}:${VERSION}(%{$fg[magenta]%}$(basename ${VIRTUAL_ENV})%{$reset_color%})" fi }
方法2:用Python代码直接输出版本(更可靠)
如果担心不同Python版本的-V输出格式有差异,可以直接用Python脚本获取版本并输出到stdout,避免依赖命令行输出的位置:
theme_python_prompt () { if [ -v VIRTUAL_ENV ]; then local VERSION="$(python -c 'import sys; print(sys.version.split()[0])')" echo -n "%{$fg[yellow]%}%{$reset_color%}:${VERSION}(%{$fg[magenta]%}$(basename ${VIRTUAL_ENV})%{$reset_color%})" fi }
至于你的theme_rbenv_prompt能正常工作,是因为rbenv_prompt_info是专门为提示符场景设计的函数,它会把版本信息输出到标准输出,所以$(...)能顺利捕获到内容。
内容的提问来源于stack exchange,提问作者hjpotter92
相关产品推荐
相关产品推荐

