У меня есть это заявление bash:
if ls > /dev/null 2>&1 -a ls > /dev/null 2>&1; then
echo "true";
else
echo "false";
fi
Что дает мне «ложь». Но я знаю, что ls
всегда будет возвращать 0
(т.е. true). Я думал, что -a
было оператором AND.
Когда я меняю это на:
if ls > /dev/null 2>&1 && ls > /dev/null 2>&1; then
echo "true";
else
echo "false";
fi
Оно работает. Что здесь происходит по-другому? Разве -a
не является оператором AND?
grep -q "state UP"
и не заморачиваться с>/dev/null
. Когдаgrep
знает, что вывод вам не нужен, он (1) не удосуживается записать его, даже в/dev/null
, где он выбрасывается; и (2) может выйти немедленно, как только будет обнаружено совпадение, без необходимости чтения остальной части входного потока. - person Charles Duffy   schedule 21.06.2018grep -q "state UP"
, я воспользуюсь ей в будущем. Для тех, кто найдет это в будущем, в этом вопросе использовалась эта команда:ip link show eth1 | grep "state UP" > /dev/null 2>&1
, которую я отредактировал для простоты. - person Connor   schedule 23.06.2018