Intereting Posts
Могу ли я установить лимит ресурсов для текущего дерева процессов? Контрольная сумма файла образа жесткого диска не совпадает с контрольной суммой устройства Передайте F10 в приложение в Gnome-terminal Ошибка mount.cifs (2): нет такого файла или каталога при использовании префикса Больше плитки с KDE почему я должен использовать tar.xz вместо tar.gz? xz – программа сжатия данных без потерь и формат файла Цвет подсветки страницы человека Список установленных программ без запуска программы в системе Замененный согласованный текст в Vim с рисунком Google Chrome заикается при прокрутке и других проблемах javac показывает другую версию на Fedora 23 Как переносить SSH в virt-manager? Настройте сервер мониторинга для получения предупреждений при сбое hw / sw и хотите определить определенные правила для мониторинга в работе сервера build-dep firefox не работает на Linux Mint Проблема в отношении firewalld

Печать команды n-го канала в bash

В bash массив PIPESTATUS содержит возвращаемые значения команд в конвейере.

Предположим, что в конвейере cmd1 | cmd2 | cmd3 cmd1 | cmd2 | cmd3 cmd1 | cmd2 | cmd3 , вторая команда возвращает ошибку. Проверка PIPESTATUS дает индекс неудачной команды, но как можно напечатать имя самой команды, cmd2 ?

Было бы неплохо также показать аргументы cmd2 , но я приму ответ, который только печатает имя команды.

     # put commands in an array, eg: cat /etc/passwd | grep 1555 | grep sh cmd=("cat /etc/passwd" "grep 1555" "grep sh") # execute commands eval "${cmd[0]}" | eval "${cmd[1]}" | eval "${cmd[2]}" # save PIPESTATUS save=("${PIPESTATUS[@]}") # print returncode and failed command for ((i=0;i<${#save[@]};i++)); do [[ ${save[$i]} -ne 0 ]] && echo "${save[$i]}: ${cmd[$i]}" done unset save cmd 

    Выход (например):

     1: grep 1555
     1: grep sh