вашей команде
diff `python3 program.py > redirect_file.txt` compare_file.txt
не работает из-за неправильного использования обратных выходов. Backticks отличаются от двойных кавычек только тем, что их содержимое оценивается оболочкой и заменяется стандартным выходом. Поскольку вы перенаправили стандартный вывод команды в файл, backticks теперь оценивают пустую строку. Таким образом, ваша команда эквивалентна:
python3 program.py > redirect_file.txt
diff "" compare_file.txt
Но вы хотите:
python3 program.py > redirect_file.txt
diff redirect_file.txt compare_file.txt
Если redirect_file.txt
используется только для сравнения, вы можете не создавать его и ускорить процесс:
python3 program.py | diff - compare_file.txt
Используется труба (|
), которая в основном соединяет стандартный вывод команды слева со стандартным вводом команды справа. Diff читает стандартный ввод, если вместо фактического имени файла указывается -
, что является довольно распространенным соглашением среди утилит оболочки.
Вы также можете использовать Bash-специфический синтаксис
diff <(python3 program.py) compare_file.txt
, но это не так портативные и создает именованный канал, который является ненужным и потенциальным источником неприятностей.
Вам нужно перенаправить вывод сценария в файл или просто хотите сравнить его с другим файлом? –