Я хочу напечатать точное слово из вывода команды

Исполняемый файл hadoopв /usr/binявляется символической ссылкой на /usr/hdp/current/hadoop-client/bin/hadoop. Вполне вероятно, что цель для этой символической ссылки не существует. Если он существует, следует исследовать его, чтобы убедиться, что он является исполняемым.

whichне отображал бы его, если символическая ссылка указывала на файл, в котором либо отсутствовала (неработающая символическая ссылка ), либо он не был исполняемым.

Кроме того, обычно лучше использовать command -v, а не which(, особенно в скриптах, которые должны быть переносимыми ).

Связанные:

3
02.05.2020, 23:51
2 ответа

Похоже, что сообщение выводится в stderr, поэтому сделайте следующее:

telnet test 2>&1 | grep -o Unable

В bash и ZSH вы также можете использовать|&:

telnet test |& grep -o Unable
4
28.04.2021, 23:16

Сообщение об ошибке, выдаваемое telnetпри невозможности подключения, печатается в стандартный поток ошибок . Стандартный поток ошибок по умолчанию отправляется прямо на терминал. Вы можете передать стандартный поток вывода только какой-либо другой команде (grep, в данном случае ).

Вы можете отправить поток ошибок в стандартный поток вывода с помощью перенаправления:

telnet test 2>&1 | grep -o Unable

Это объединит два потока и grepвоздействует на объединенный поток данных.

Если вы хотите отловить состояние ошибки в telnet, также можно было бы использовать статус выхода утилиты:

if ! telnet test 2>/dev/null; then
    echo 'something went wrong with telnet'
    exit 1
fi

echo 'telnet ran successfully'

Это приведет к выходу из сценария, если telnetвернет не -нулевой статус выхода (, сигнализирующий о каком-то сбое ). Я дополнительно перенаправил поток ошибок на /dev/null, чтобы полностью отбросить его.

5
28.04.2021, 23:16

Теги

Похожие вопросы