Это работает:
if diff "./helloworld$x.out" "./output/helloworld$x.out"> / dev / null; тогда
echo "Пройдено $ x";
еще
echo "Failed $ x";
фи
Если вы используете переменную вместо echo
вас, вы можете отбросить else
ветку: установите переменную в false перед if
и сохраните 2 строки кода.
Если вы хотите поместить результат в переменную, используйте:
some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"
Включая мой тест, чтобы увидеть, действительно ли он работает:
rinzwind @ discworld: ~ $ touch 1
rinzwind @ discworld: ~ $ touch 2
rinzwind @ discworld: еще $ тест
если diff 1 2> / dev / null; тогда
echo "Пройдено $ x";
еще
echo "Failed $ x";
фи
rinzwind @ discworld: ~ $ ./test
Прошло
rinzwind @ discworld: ~ $ vi 2
rinzwind @ discworld: ~ $ больше 2
2
rinzwind @ discworld: ~ $ ./test
Не удалось
Со >/dev/null
стороны: >/dev/null 2>&1
отправит выходные данные >/dev/null
и 2>&1
отправит стандартные ошибки в тот же файл ( &1
означает «использовать первый параметр») перед этой командой (поэтому она также использует /dev/null
).
sidenote: sdiff
покажет параллельные diff
списки:
SDIF 1 2
1 1
2 2
3 3
4 4
5 5
7 7
> 8
9 9
10 10
... > /dev/null
делает в этом контексте. Вывод diff будет идти в / dev / null, но разве это ничего?diff
может даже полностью подавить вывод, за исключением сообщений «Files / bin / bash и / bin / sh другому», используя код ниже.Если вы даже хотите скрыть это сообщение, вам нужно добавить
> /dev/null
после команды diff, чтобы скрыть выводdiff
:/dev/null
это специальный файл, который действует как черная дыра, если вы напишите в него, он исчезнет, если вы читаете из него, вы ничего не получите обратно.Обратите внимание, что bash не нужно
;
заканчивать строки.Что касается исходного вопроса, чтобы сохранить вывод программы в переменной:
Альтернативные способы проверить, является ли переменная пустой:
Если вы используете Bash, последние две команды рекомендуются для сравнения строк. В противном случае первое и
[ -n "$output" ]
рекомендуется.источник
а) Вывод команды 1 может быть пойман с
или с обратными галочками, но это не рекомендуется, потому что вы не можете их вкладывать, и их может быть трудно отличить от апострофа, в зависимости от шрифта:
б) Вместо того, чтобы записывать в файл, а затем читать этот файл (или захватывать вывод, а затем повторять его), вы бы напрямую использовали канал:
=>
но в вашем примере вас интересует не результат, а результат программы - сработало ли это?
Прочитать об использовании && и || поиск "ярлык И и ярлык ИЛИ".
Чтобы сохранить вывод в чистоте, вы можете перенаправить вывод 'diff' в никуда:
Чтобы получить успех и оценить его позже, вы сохраните результат последней команды в переменной с $ ?:
источник
Если вы хотите знать, являются ли два файла одинаковыми или различаются (но не волнует, в чем на самом деле разница), то вам
cmp
больше подойдет.источник