Создание «установщиков» для Linux

[является специальным в TCL, а "..."интерполирует, поэтому

"blah [foo]"

заставляет TCL пытаться вызвать процедуру foo(procили то, что другие языки могут вызывать subилиfunction). Можно либо ударить[

expect "blah \[foo]"

или вместо этого укажите {}, который отключает интерполяцию

expect {blah [foo]}

Это разумные варианты. Не используйте код дальше этой точки!

Министерство глупых дел

Мы также можем создать proc, который заставляет вызов Y/nвозвращать [Y/n];

$ expect
expect1.1> proc Y/n {} { return "\[Y/n]" }
expect1.2> puts "abort [Y/n]"
abort [Y/n]
expect1.3> 

это позволяет [Y/n]работать в интерполированной строке. Еще больше проблем можно получить с помощью unknown(n), так как это позволяет нам создать procдля большей части любой случайной строки [...], интерполированной где угодно... если, конечно, procуже не существует для данного имени процедуры; как я уже говорил ранее, это плохая идея и не должна использоваться.

expect1.1> proc unknown args { return "\[$args]" }
expect1.2> puts "abort [Y/n]"
abort [Y/n]
expect1.3> puts "already exists [puts -nonewline puts\ ]"
puts already exists 
expect1.4> 
1
20.08.2019, 15:00
0 ответов

Теги

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