我有一个如下的shell脚本
#!/usr/bin/env bash
#Packages list
declare -a packages=( git build_essential node )
declare -a packages_status
# installing=`apt-get install -y `
installing="echo "
for i in "${packages[@]}"
do
packages_status[$i]=$(dpkg-query -W -f='${status}' $i | grep "install ok installed")
# echo ${packages_status[$i]}
done
代码行
packages_status[$i]=$(dpkg-query -W -f='${status}' $i | grep "install ok installed")
产生以下输出
dpkg查询:找不到与build_essential匹配的软件包
dpkg查询:找不到与节点匹配的软件包
我希望LOC在不产生任何输出的情况下执行。
答案 0 :(得分:2)
dpkg-query
命令将错误输出到stderr,而不是stdout。
因此,在管道传输到grep之前,应该先链接两个通道:
packages_status[$i]=$(dpkg-query -W -f='${status}' $i 2>&1 | grep "install ok installed")
通过这种方式,脚本将只为已安装的软件包打印“ install ok installed”行。
答案 1 :(得分:1)
为了不看到错误输出,您可以将该输出(流号2)重定向到NULL
设备:
Do_Whatever 2>/dev/null
为了看不到任何输出,您可以将正常输出(流号1)重定向到NULL
设备,也将错误输出也重定向到该设备:
Do_Whatever >/dev/null 2>&1