Исполняемый файл hadoop
в /usr/bin
является символической ссылкой на /usr/hdp/current/hadoop-client/bin/hadoop
. Вполне вероятно, что цель для этой символической ссылки не существует. Если он существует, следует исследовать его, чтобы убедиться, что он является исполняемым.
which
не отображал бы его, если символическая ссылка указывала на файл, в котором либо отсутствовала (неработающая символическая ссылка ), либо он не был исполняемым.
Кроме того, обычно лучше использовать command -v
, а не which
(, особенно в скриптах, которые должны быть переносимыми ).
Связанные:
Похоже, что сообщение выводится в stderr, поэтому сделайте следующее:
telnet test 2>&1 | grep -o Unable
В bash и ZSH вы также можете использовать|&
:
telnet test |& grep -o Unable
Сообщение об ошибке, выдаваемое 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
, чтобы полностью отбросить его.