Есть два экземпляра 1.1.1.1
; при условии, что первый экземпляр подходит для сопоставления, сначала нужно написать простой сценарий, который генерирует требуемый вывод, а также включает поддельные подсказки, которые более или менее выполняются удаленным устройством :
#!/usr/bin/env expect
proc prompt {} { puts "prompt"; gets stdin; }
prompt
puts "Last update from 1.1.1.1 1d06h ago"
puts " Routing Descriptor Blocks:"
puts " * 1.1.1.1 from 2.2.2.2"
prompt
Я назвал этот скрипт generator
; тогда также нужен другой скрипт, который вызывает этот скрипт и взаимодействует с ним. Но сначала отвлечемся на то, как быстро итерировать изменения в этих скриптах; в другом терминале я работал:
$ (echo consume; echo generate) | entr./consume
...
, который запускает сценарий consume
в любое время при изменении одного из сценариев consume
или generate
. Затем я могу возиться со сценариями, чтобы взаимодействовать с подсказками, найти требуемый вывод и применить к нему регулярное выражение (прочитать regexp(n)
руководство ):
#!/usr/bin/env expect
spawn -noecho./generate
expect -ex prompt
send -- "before\r"
expect -ex prompt
# this is what I used to confirm that the required prompt block
# had been matched
#puts ">>>$expect_out(buffer)<<<"
regexp {Last update from ([^ ]+) } $expect_out(buffer) unused theip
puts ">>>$theip<<<"
send -- "after\r"
expect eof
этот метод предполагает, что желаемый вывод заключен в подсказки; другим вариантом может быть expect
строка Last update...
с регулярным выражением, но это может быть более сложным. Также это совпадение IP-адреса действительно может соответствовать чему угодно; используйте более точное регулярное выражение, если вам нужно проверить, что текст действительно является IP-адресом.
разные заботы:
ssh
вместо этого выдаст ошибку ключа хоста или приглашение, или... Наконец-то нашел рабочее решение:
1 )Следуйте очень подробным инструкциям здесь ...
2 )...Но вместо того, чтобы использовать его сценарий установки, возьмите дружественную альтернативу btrfs -из здесь ...
3 )...И внесите одно ручное редактирование :измените вызов "cryptsetup luksFormat" на добавление " --type=luks1". Потому что согласно здесь:
Стандартный формат LUKS (Linux Unified Key Setup ), используемый инструментом cryptsetup, изменился с момента выпуска 18.04 Bionic. 18.04 использовалась версия 1 («luks1» ), но более поздние выпуски Ubuntu по умолчанию используют версию 2 («luks2» ). GRUB поддерживает только версию 1, поэтому мы должны указывать явно используемые команды, иначе GRUB не сможет установить или разблокировать зашифрованное устройство.
Мне помог обходной путь:
ubiquity-frontend-gtk
ubiquity gtk_ui
в терминале Это нормально работает в версии Ubiquity GTK.