Как мне отличить вывод двух команд?

116

Я предположил, что самый простой способ сравнить содержимое двух подобных каталогов - это что-то вроде

diff 'ls old' 'ls new'

Но я понимаю, почему это не работает; diff получает большой длинный список файлов в командной строке, а не два потока, как я надеялся. Как передать два выхода на diff напрямую?

    
задан Ternary 15.12.2012 в 22:01
источник

1 ответ

171

Подстановка команды '…' заменяет вывод команды в командной строке, поэтому diff видит список файлов в обоих каталогах в качестве аргументов. Вы хотите, чтобы diff отображал два имени файла в командной строке и содержимое этих файлов было списком каталогов. Вот что делает замещение процесса .

diff <(ls old) <(ls new)

Аргументы для diff будут выглядеть как /dev/fd/3 и /dev/fd/4 : это дескрипторы файлов, соответствующие двум каналам, созданным bash. Когда diff открывает эти файлы, он будет подключен к стороне чтения каждого канала. Сторона записи каждого канала подключается к команде ls .

    
ответ дан Gilles 15.12.2012 в 22:06
источник

Ознакомьтесь с другими вопросами по меткам