Вопрос или проблема
В Linux в Bash я запускаю скрипт с некоторыми вызовами cryptsetup, такими как
--luks2-metadata-size=16k --luks2-keyslots-size=256k .... luksFormat ....
которые выводят предупреждения.
Я знаю и понимаю, но не хочу видеть эти предупреждения на экране.
Как я могу подавить их, но при этом показывать сообщения об ошибках?
Ответ или решение
Чтобы подавить предупреждающие сообщения от утилиты cryptsetup в Linux, одновременно сохранив вывод ошибок, существует несколько подходов, которые Вы можете использовать в своем Bash-скрипте. В данном ответе мы рассмотрим каждый из них, предоставив полное понимание проблемы и эффективные способы ее решения.
Подход 1: Направление вывода
Вы можете использовать оператор перенаправления, чтобы направить предупреждения в "черную дыру", сохранив при этом вывод ошибок. В Linux сообщения об предупреждениях, как правило, выводятся на стандартный поток вывода (stdout), в то время как ошибки отправляются на стандартный поток ошибок (stderr).
Для подавления предупреждений, используйте следующую конструкцию:
cryptsetup <ваша команда> 2> /dev/null
Этот пример перенаправляет поток ошибок в /dev/null
, таким образом Вы не увидите никаких предупреждений на экране. Если ваша команда также выводит ошибки, они все равно будут отображены.
Если предупреждения содержатся в стандартном выводе, то есть в stdout
, и они не отображаются в stderr
, можете использовать:
cryptsetup <ваша команда> >/dev/null 2>&1
Но это также подавит все ошибки, что не нужно в вашем случае. Поэтому лучше всего будет оставить только предупреждения, которые можно перенаправить отдельно.
Подход 2: Фильтрация вывода с помощью grep
Если вы хотите более тонко отфильтровать вывод и оставить только ошибки, а предупреждения убрать, можно воспользоваться командой grep
. Вы можете использовать регулярные выражения, чтобы отфильтровать предупреждения:
cryptsetup <ваша команда> | grep -v "WARNING" 2>&1
Здесь grep -v "WARNING"
уберет строки, содержащие слово "WARNING", оставляя только важные сообщения об ошибках и другую информацию.
Подход 3: Использование sed
для фильтрации
Если предупреждения имеют определенный шаблон, вы можете также использовать sed
для удаления строк предупреждений:
cryptsetup <ваша команда> 2>&1 | sed '/WARNING/d'
Этот пример использует sed
для удаления всех строк, содержащих "WARNING". Таким образом, все остальные ошибки будут отображаться.
Подход 4: Внедрение в скрипт
Внедрите одно из приведенных решений в ваш Bash-скрипт, чтобы подавлять предупреждения от cryptsetup
, например:
#!/bin/bash
cryptsetup luksFormat --luks2-metadata-size=16k --luks2-keyslots-size=256k <другие параметры> 2> /dev/null
if [ $? -ne 0 ]; then
echo "Произошла ошибка при выполнении команды!"
fi
Заключение
Подавление предупреждений от cryptsetup
, сохраняя при этом сообщения об ошибках, возможно несколькими способами: через перенаправление потоков вывода, использование grep
и sed
. Используйте подход, который наиболее соответствует вашим требованиям и стилю скрипта, чтобы эффективно управлять отображаемыми сообщениями. Такой контроль за выводом информации поможет сделать ваш скрипт более информативным и удобочитаемым.
Если у Вас есть дополнительные вопросы или нужно больше деталей, не стесняйтесь обращаться!