Как я могу заставить `ожидать` игнорировать $ (знак доллара) в пароле?

Вы можете использовать squashfs , чтобы создать сжатый версия вашей файловой системы.

Сначала проверьте, установлен ли squashfs-tools или нет. Я не знаю точного названия посылки. Так что поищите в Google, чтобы установить его на свой Ubuntu.

После установки выполните-

  1. sudo mount / dev / xxx / mnt (Замените xxx на правильное имя раздела. Это должен быть раздел , на котором установлена ​​ваша ОС
  2. cd ~
  3. sudo mksquashfs / mnt root.sfs -comp xz
  4. Теперь у вас должен быть файл с именем root.sfs в вашей домашней папке. Сделайте резервную копию.

Чтобы переустановить это,

  1. Вставьте live CD на вашем целевом ПК, смонтируйте USB или что-то еще, что используется для копирования сжатого файла.
  2. cd в каталог, содержащий root.sfs
  3. sudo unsquashfs root.sfs
  4. Теперь у вас будет каталог с именем squashfs-root. Скопируйте его содержимое в нужный раздел, куда хотите установить систему.
  5. В качестве последнего шага выполните chroot в только что установленной системе, запустите update-initramfs и установите GRUB и перезагрузите update-grub
  6. .
3
20.12.2016, 01:25
2 ответа

Есть два пути; либо используйте обратную косую черту для каждого специального символа, либо вместо этого используйте фигурные скобки вокруг пароля:

expect1.1> set pass "\$Hunter2"
$Hunter2
expect1.2> set pass {$Hunter2}
$Hunter2

Три! Три способа: пароль можно прочитать из файла thepasswordfile ; это имеет то преимущество, что пароль отсутствует в коде:

#!/usr/bin/env expect

# wrap with catch(n) or try(n) if you don't want an error to abort 
# the code...
set fh [open thepasswordfile]
set password [gets $fh]

puts $password

В-четвертых, соберите пароль из программы, которая выводит его на стандартный вывод:

#!/usr/bin/env expect

if {[catch {exec ./getthepassword} results options]} {
    puts $results
    exit 1
}

puts $results

Это может выглядеть примерно так:

$ cat fromstdin 
#!/usr/bin/env expect

if {[catch {exec ./getthepassword} results options]} {
    puts $results
    exit 1
}

puts $results

$ cat getthepassword 
#!/bin/sh
echo '$Hunter2'

$ chmod +x fromstdin getthepassword
$ ./fromstdin 
$Hunter2
$ 

Пять! Пятью способами пароль также можно прочитать из среды ( окружение (7) , tclvars (n) )

#!/usr/bin/env expect
set password $env(pass)
puts $password

при условии, что экспортный проход = '$ Hunter2' или эквивалент был выполнен в родительском процессе до вызова этой реализации. Оборотная сторона: переменные среды передаются всем дочерним процессам, которым может потребоваться или не иметь права на просмотр пароля. В случае сомнений отключите переменную после ее использования или копирования:

#!/usr/bin/env expect
set password $env(pass)
unset env(pass)
...
6
27.01.2020, 21:13

У меня была аналогичная проблема, когда я хотел передать имя файла с $в сценарии ожидания, и следующее сработало для меня

filePath=$(echo -n $filePath | sed -e 's/\$/\\\$/g')
0
27.01.2020, 21:13

Теги

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