我有一个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查询:未找到与基本生成匹配的包
dpkg查询:未找到与节点匹配的包
我希望loc在不产生任何输出的情况下执行。
最佳答案
dpkg-query
命令将错误输出到stderr,而不是stdout。
因此,在将管道连接到grep之前,应先链接这两个通道:
packages_status[$i]=$(dpkg-query -W -f='${status}' $i 2>&1 | grep "install ok installed")
这样,脚本将只为已安装的软件包打印“install ok installed”行。
关于linux - 如何限制循环执行的命令的Shell脚本中的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55160109/