#linux #shell #scripting #ubuntu-16.04
#linux #оболочка #сценарии #ubuntu-16.04
Вопрос:
У меня есть сценарий оболочки следующим образом
#!/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 выполнялся без какого-либо вывода.
Ответ №1:
dpkg-query
команда выводит ошибки в stderr, а не в stdout.
Итак, вам следует связать два канала перед передачей в grep:
packages_status[$i]=$(dpkg-query -W -f='${status}' $i 2>amp;1 | grep "install ok installed")
Таким образом, скрипт будет выводить только строки «установить ok установлено» для установленных пакетов.
Ответ №2:
Чтобы не видеть вывод ошибки, вы можете перенаправить этот вывод (поток № 2) на NULL
устройство:
Do_Whatever 2>/dev/null
Чтобы не видеть никаких выходных данных, вы можете перенаправить обычный вывод (поток № 1) на NULL
устройство и перенаправить вывод ошибок туда же:
Do_Whatever >/dev/null 2>amp;1
Комментарии:
1. Спасибо Доминику за ответ. На самом деле я создавал пользовательский скрипт для настройки полной среды разработки в Vagrant. Поэтому я не могу перенаправить весь вывод скрипта на NULL