Использование:
git diff --color=always | less -r
--color=always
есть ли для сообщения git
к кодам цвета вывода, даже если вывод является каналом (не tty). И -r
есть ли для сообщения less
интерпретировать те цветовые коды и другие escape-последовательности. Использовать -R
для цветовых кодов ANSI только.
Как условно сделать что-то если команда, за которой следуют или неудавшийся
Это точно что удар if
оператор делает:
if command ; then
echo "Command succeeded"
else
echo "Command failed"
fi
Добавление информации из комментариев: Вы не должны использовать [
... ]
синтаксис в этом случае. [
самостоятельно команда, очень почти эквивалентная test
. Это - вероятно, наиболее распространенная команда для использования в if
, который может привести к предположению, что это - часть синтаксиса оболочки. Но если Вы хотите протестировать, ли команда, за которой следуют или нет, используйте саму команду непосредственно с if
, как показано выше.
Для мелочей, что Вы хотите произойти, если команда оболочки работает, можно использовать &&
конструкция:
rm -rf somedir && trace_output "Removed the directory"
Так же для мелочей, что Вы хотите произойти, когда команда оболочки перестала работать, можно использовать ||
:
rm -rf somedir || exit_on_error "Failed to remove the directory"
Или оба
rm -rf somedir && trace_output "Removed the directory" || exit_on_error "Failed to remove the directory"
Вероятно, неблагоразумно сделать очень много с этими конструкциями, но они могут при случае сделать поток из управления намного более ясным.
Проверьте значение $?
, который содержит результат выполнения новой команды/функции:
#!/bin/bash
echo "this will work"
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo success
else
echo failed
fi
if [ $RESULT == 0 ]; then
echo success 2
else
echo failed 2
fi
if
идиома. Я предпочитаю ответ Keith Thompson.
– janmoesen
17.10.2011, 14:30
if
должен сделать это. Условия управления потоком в Bash все исследуют $?
негласно; это - то, что они делают. Явно исследование его значения должно быть ненужным в подавляющем большинстве случаев и обычно является антишаблоном новичка.
– tripleee
04.11.2016, 14:34
Это работало на меня:
command && echo "OK" || echo "NOK"
если command
успешно выполняется, затем echo "OK"
выполняется, и так как это успешно, выполнение останавливается там. Иначе, &&
пропускается, и echo "NOK"
выполняется.
command && echo "OK" || c=$?; echo "NOK"; $(exit $c)
– Sam Hasler
24.06.2014, 18:57
command && echo "OK" || (c=$?; echo "NOK"; (exit $c))
?
– jrw32982 supports Monica
01.04.2015, 21:24
echo "OK"
часть могла самостоятельно перестать работать, затем это лучше: command && (echo "OK"; exit 0) || (c=$?; echo "NOK"; (exit $c))
– jrw32982 supports Monica
01.04.2015, 21:34
Вы можете сделать это:
if ($( ping 4.4.4.4 -c1 > /dev/null )) ; then
echo "ping response succsess!!!"
fi
Это могло быть сделано просто таким образом как $?
дает вам состояние последней выполняемой команды.
, Таким образом, это могло быть
#!/bin/sh
... some command ...
if [ $? == 0 ] ; then
echo '<the output message you want to display>'
else
echo '<failure message>'
fi
Как отмечалось в другом месте этой цепочки, исходный вопрос в основном отвечает сам собой. Вот иллюстрация, показывающая, что условия if
также могут быть вложенными.
В этом примере используется if
, чтобы проверить, существует ли файл и является ли он обычным файлом. Если эти условия верны, проверьте, имеет ли он размер больше 0.
#!/bin/bash
echo "Which error log are you checking today? "
read answer
if [ -f /opt/logs/$answer*.errors ]
then
if [ -s /opt/logs/$answer*.errors ]
then
echo "Content is present in the $answer error log file."
else
echo "No errors are present in the $answer error log file."
fi
else
echo "$answer does not have an error log at this time."
fi
then
на отдельной строке. – l0b0 17.10.2011, 12:00if ! command ; then ... ; fi
.[
самостоятельно команда, и это не нужно в этом случае. режим – Keith Thompson 13.01.2012, 12:19if [ ! command ]
не выполняетсяcommand
; это рассматриваетcommand
как строка и обработки это как верный, потому что это имеет ненулевую длину.[
синоним дляtest
команда – Keith Thompson 14.01.2012, 11:36