容器内PHP自动更新脚本:命令输出无法存入变量求助
解决update-alternatives输出无法捕获到变量的问题
问题根源
update-alternatives --config php的交互提示内容是输出到标准错误流(stderr),而非标准输出流(stdout)。管道|默认只传递stdout的内容,所以后续的grep命令根本没接收到有效数据,最终导致变量为空。直接执行命令时能看到输出,是因为stderr默认会打印到终端,和stdout的内容混在一起显示。
修复命令
将stderr重定向到stdout(通过2>&1实现),让管道能捕获到所有输出。修改后的命令如下:
var=$(echo '' | update-alternatives --config php 2>&1 | grep "$version" | grep auto | head -n 1 | tr -d ' \r\t')
额外优化建议
- 给
$version变量添加双引号,避免版本号包含特殊字符时出现匹配异常 - 用Here字符串替代
echo '' |,写法更简洁:
var=$(update-alternatives --config php 2>&1 <<< '' | grep "$version" | grep auto | head -n 1 | tr -d ' \r\t')
- 若只是验证指定版本是否为自动模式的默认PHP,推荐使用
update-alternatives --query php获取结构化输出,逻辑更可靠:
# 检查指定版本是否是auto模式的默认选项 is_active=$(update-alternatives --query php | awk -v ver="$version" '/^Alternative: /{alt=$2} /^Status: /{if($2=="auto" && alt~ver) print "yes"}')
内容的提问来源于stack exchange,提问作者CiTests Tests
相关产品推荐
相关产品推荐

