bash: вывод по умолчанию при пустом вводе из канала - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь передать несколько разных команд вместе.некоторые команды могут возвращать пустой вывод.в таком случае я хотел бы иметь вывод по умолчанию, а не пустой.Как я могу достичь этого в Bash?

1 Ответ

0 голосов
/ 04 июня 2018

Просто используйте команду read с таймаутом, чтобы увидеть, возвращает ли он что-то и вернуть вывод по умолчанию в тех случаях, когда он пуст.Это зависит от кода завершения, возвращаемого командой read при невозможности чтения из входного потока.

.. | { read -r -t1 val || echo 'something' ; }

Например, при попытке найти иголку в стоге сена

echo haystack | grep needle | { read -r -t1 val && echo "$val" || echo 'something' ;  }

Общий шаблон для этого варианта использования, использующий условие if, будет выглядеть примерно так, как показано ниже, и более подробно написано:

if read -r -t1 val < <(echo haystack | grep needle); then 
    printf '%s\n' "$val"
else 
    printf '%s\n' "something"
fi

Вы можете заменить деталь echo haystack | grep needle командой, с которой вы работаете.

...