Ответ 1
Этот синтаксис перенаправления bash специфичен. Таким образом, он не будет работать в tcsh.
Вы можете вызвать bash и указать команду напрямую:
bash -c 'diff <(sort text2) <(sort text1)'
У меня есть два файла, в которых некоторые из строк изменили порядок. Я хотел бы иметь возможность сравнить их.
На одном веб-сайте было предложено следующее:
diff <(sort text2) <(sort text1)
Но это приводит к ошибке: Отсутствует имя для перенаправления.
Я использую tcsh. Является ли команда выше для другой оболочки?
Есть ли лучший способ?
Этот синтаксис перенаправления bash специфичен. Таким образом, он не будет работать в tcsh.
Вы можете вызвать bash и указать команду напрямую:
bash -c 'diff <(sort text2) <(sort text1)'
Здесь функция для него:
function diffs() {
diff "${@:3}" <(sort "$1") <(sort "$2")
}
Назовите его следующим образом:
diffs file1 file2 [other diff args, e.g. -y]
Предположительно, вы можете изменить его в соответствии с ответом Дэвида Шмитта, если это необходимо.
Если это не работает для вашей оболочки, просто сделайте это в 3 строках:
sort text1 > text1.sorted
sort text2 > text2.sorted
diff text1.sorted text2.sorted
Простой, но должен работать...
Проблема с вашим размещенным "diff" заключается в том, что diff
может получать только один файл через stdin
. Поэтому я думаю, вам придется записать хотя бы один отсортированный файл во временный файл.
diff - file.txt
будет diff stdin против файла .txt. '-' представляет stdin
EDIT: Я предположил, что подстановка процесса будет работать через stdin. Но это не тот случай и выше происходит через /dev/fd/{num}
, как указано VardhanDotNet выше.