Есть ли способ получить правильный хэш моментального снимка zfs?

Когда вы запускаете echo, вы отправляете вывод на терминал. Терминал интерпретирует escape-последовательности, например, для изменения цвета в отправляемом ему выводе. Эти escape-последовательности предназначены для отправки приложениями, поэтому они распознаются в выводе, который поступает из приложения, работающего в терминале. Обычно приложение, работающее в терминале, запускается эмулятором терминала (вашей оболочкой )и теми, которые запускаются им по очереди, но если вы запустите echo … >/dev/tty2, то echoфактически «работает в терминале». ” (в том смысле, что его вывод идет на терминал, что здесь имеет значение ).

Когда вы нажимаете Esc [ и т. д., вы отправляете ввод на терминал. Терминал не интерпретирует escape-последовательности, например, для изменения цвета на входе, который он получает. Терминал интерпретирует escape-последовательности при вводе, но для совершенно другой цели :они представляют собой способ кодирования нажатий функциональных клавиш.

Как работает ввод с клавиатуры и вывод текста? имеет соответствующую предысторию.

0
17.07.2019, 10:08
1 ответ

ОБНОВЛЕНИЕ:

Вы должны иметь возможность сделать что-то подобное с оболочкой Bash:

zfs send [snip] | tee >(md5sum > checksum.log) | ssh [snip]

См. раздел Process Substitutionв man bash. (Спасибо Оле Танге за указание на это упрощение.)

Оригинальный ответ:

Есть несколько способов сделать то, что вы хотите.

Вы можете написать скрипт (или программу на Python или на другом языке по вашему выбору ), который будет читать из stdinи одновременно (a )вычислять контрольную сумму и (b )передача данных в подпроцесс (, например, в ssh).

Кроме того, вы могли бы сделать что-нибудь в Bash, например:

zfs send [snip] | tee /proc/self/fd/4 4>(md5sum > checksum.log) | ssh [snip]

Я не проверял описанное выше, поэтому не могу гарантировать, что оно будет работать. Если в вашей системе нет /proc/self/fd/N, вам может понадобиться найти (или написать )какую-нибудь программу, отличную от tee. См. man teeи раздел REDIRECTIONв man bash, в частности, подраздел Redirecting Output.

0
02.07.2020, 19:19

Теги

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