我有一个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/

10-13 08:06