Какой fd's используются при выполнении разности <(старая кошка) <(новая кошка)?

Я предполагаю, что в настоящее время программа запущена на хосте, к которому у вас есть доступ. Вы можете посмотреть опцию репакетажа, используемую как rpm -e --repackage foo. Обратите внимание, что это включает в себя -e вариант, что удалит ваше целевое программное обеспечение! В прошлый раз, когда я рассматривал этот вариант, не было внутреннего инструмента, который мог бы переупаковать rpm без деинсталляции.

... и это тоже выглядит многообещающе, взгляните : http://rpmrebuild.sourceforge.net

1
07.06.2014, 01:49
2 ответа

Вы можете попробовать сами:

echo <(echo) <(echo)

Diff просто читает из обоих файлов.

Если вы хотите использовать <(...) в качестве параметра вашего сценария bash, помните, что вы не можете «перемотать» файл (или повторно открыть). Итак, как только вы это прочитаете, он исчезнет. Вы можете использовать read , чтобы обработать его построчно, вы можете grep или что-то еще. Если вам нужно обработать его более одного раза, либо сохраните его содержимое в переменной

input=$(cat "$1"; printf x) # The "x" keeps the trailing empty lines.
input=${input%x}

, либо скопируйте его во временный файл и прочитайте его снова и снова:

tmp=$(mktemp)
cat "$1" > "$tmp"
1
27.01.2020, 23:38

Для diff нет никакой разницы, как если бы вы набрали diff old new . Оператор <(cmd) перенаправляет стандартный вывод cmd1 в FIFO, а затем передает FIFO в качестве аргумента в diff .

См. Пример:

user@host:~$ echo <(ls)
/dev/fd/63

/ dev / fd / 63 - это FIFO, содержащее вывод ls , см. cat <(ls) печатает вывод fifo, отсюда вывод ls .

Итак, программа diff выполняется примерно так:

diff /dev/fd/63 /dev/fd/64

И оба файла FIFO содержат вывод cmds. Для diff это файлы.

1
27.01.2020, 23:38

Теги

Похожие вопросы