Я понимаю эту часть: command -v kubectl > /dev/null 2>&1
, поэтому, если она терпит неудачу или нет, мы перенаправляем вывод в / dev / null, в котором, если я правильно понимаю, это означает, что игнорировать его во всех случаях.
Вы неправильно поняли это;ни одна часть command -v kubectl > /dev/null 2>&1
не имеет никакого отношения к «если не получится» против «нет».
Скорее, >
и 2>
перенаправляют два разных типа вывода;>
(или 1>
) перенаправляет все, что команда записывает в стандартный вывод , а 2>
перенаправляет все, что команда пишет в стандартная ошибка .Записывает ли команда что-либо в стандартный вывод, не зависит от того, завершится ли она успешно или нет;записывает ли он что-либо в стандартную ошибку, не зависит от того, завершится ли он успешно или нет;и то, записывает ли он что-либо в стандартный вывод, не зависит от того, записывает ли он что-либо в стандартную ошибку.
Например, вот команда, которая печатает как в стандартный вывод, так и в стандартную ошибку, а затем успешно возвращает:
( echo "this is on standard output" ; echo "this is on standard error" >&2 ; exit 0 )
, а вот тот, который печатает как на стандартный вывод, так и на стандартную ошибку, а затем дает сбой:
( echo "this is on standard output" ; echo "this is on standard error" >&2 ; exit 1 )
В отличие от этого, ||
действительно имеет отношение к тому, была ли команда выполнена успешно (выход с нуля) или сбой (выход с чем-то отличным от нуля).