"Противоположность" &> /dev/null
Я использую следующий скрипт для сравнения с папками:
if diff "/home/folder1/" "/home/folder2/" &> /dev/null ; then
echo "Files in the two folders are the same"
else
echo "Files in the two folders are NOT the same"
fi
Есть ли краткий способ объяснить, что на самом деле делает "&> /dev/null", возвращает ли оно логическое значение true/false?
И мой главный вопрос: что будет противоположным? Я имею в виду, что я хочу, чтобы вопрос "if diff" был "Разве содержимое двух папок НЕ одинаковое?"
3 ответа
Ваш &> /dev/null
перенаправляет вывод stdout и stderr в /dev/null
эффективно подавляя весь вывод процесса. Код выхода программы (числовой "результат", обычно обозначающий "успех" (0) или "неудача" (любое другое число)) не подвержен этому влиянию.
Чтобы изменить условие (diff
), просто вставьте восклицательный знак, указав not
оператор:
if ! diff "/home/folder1/" "/home/folder2/" &> /dev/null ; then
...
diff
инструмент всегда заканчивается значением выхода 0
если (и только если) это не находит никакой разницы. Если есть разница, 1
значение выхода; если есть проблема (ошибка ввода-вывода или тому подобное), 2
это выходное значение. if
оболочки интерпретирует выходные значения 0
быть истинным, а все остальные значения - ложными (учтите, потому что это совершенно противоположно другим языкам программирования!).
diff "folder1" "folder2"
вернул бы список различий между двумя папками.
&> /dev/null
перенаправляет стандартный вывод (все выходные данные терминала, который не является ошибкой) все стандартный вывод и стандартный вывод на виртуальное устройство с именем null
который отбрасывает ваши данные.
&> Перенаправляет как обычный вывод, так и ошибки в файл. В этом случае он использует файл "/dev/null", который также называется "корзиной битов": он просто отбрасывает все. Это означает, что вывод отбрасывается. Если вы этого не сделаете, ваш скрипт покажет выходные данные команд (которые вы не хотите показывать в выходных данных).
Смотрите также: http://wiki.bash-hackers.org/syntax/redirection