Я предполагаю, что в настоящее время программа запущена на хосте, к которому у вас есть доступ.
Вы можете посмотреть опцию репакетажа, используемую как rpm -e --repackage foo
.
Обратите внимание, что это включает в себя -e вариант, что удалит ваше целевое программное обеспечение!
В прошлый раз, когда я рассматривал этот вариант, не было внутреннего инструмента, который мог бы переупаковать rpm без деинсталляции.
... и это тоже выглядит многообещающе, взгляните : http://rpmrebuild.sourceforge.net
Вы можете попробовать сами:
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"
Для 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
это файлы.