Как ограничить вывод в сценарии оболочки команды, выполняемой в цикле - PullRequest
0 голосов
/ 14 марта 2019

У меня есть скрипт оболочки следующим образом

#!/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-query: не найдено пакетов, соответствующих build_essential

dpkg-query: не найдено пакетов, соответствующих узлу

Я хочу, чтобы этот LOC выполнялся без какого-либо вывода.

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

dpkg-query команда выводит ошибки в stderr, а не в stdout.
Таким образом, вы должны связать два канала перед тем, как отправлять сообщения в grep:

packages_status[$i]=$(dpkg-query -W -f='${status}' $i 2>&1 | grep "install ok installed")

Таким образом, скрипт будет печатать только строки «install ok selected» для установленных пакетов.

1 голос
/ 14 марта 2019

Чтобы не видеть вывод ошибок, вы можете перенаправить этот вывод (поток номер 2) на устройство NULL:

Do_Whatever 2>/dev/null

Чтобы не видеть никаких выходных данных, вы можете перенаправить обычный вывод (поток номер 1) на устройство NULL и перенаправить вывод ошибок там же:

Do_Whatever >/dev/null 2>&1
...