检查软件包是否安装:bash脚本命令输出赋值为空求助
解决bash脚本中捕获命令不存在错误信息为空的问题
这个问题我之前也踩过坑!核心原因是:当bml命令不存在时,shell输出的"command not found"错误信息是发送到标准错误(stderr),而你用$()捕获的是标准输出(stdout),所以变量bml_check自然会是空值。
快速修复原脚本
如果你只是想捕获到错误信息,只需要把标准错误重定向到标准输出,修改后的脚本如下:
#!/bin/bash bml_check="$(bml -v 2>&1)" echo "$bml_check"
这里的2>&1表示把文件描述符2(stderr)的内容重定向到文件描述符1(stdout),这样$()就能同时捕获正常输出和错误信息了。
更可靠的软件安装判断方案
其实判断软件是否安装,不用捕获错误信息,直接检查命令是否存在会更高效可靠。推荐用command -v或者type命令,示例脚本如下:
#!/bin/bash if command -v bml &> /dev/null; then echo "bml已安装" # 获取版本信息 bml_version=$(bml -v) echo "版本信息:$bml_version" else echo "bml未安装,错误详情:$(bml -v 2>&1)" fi
为什么推荐这种方式?
command -v是POSIX标准命令,跨shell兼容性更好(比如在dash、bash里都能用)&> /dev/null会丢弃所有输出,只通过返回值判断命令是否存在,避免不必要的输出捕获- 逻辑更清晰,分开处理“已安装”和“未安装”的场景
内容的提问来源于stack exchange,提问作者Nagireddy Hanisha
相关产品推荐
相关产品推荐

