expect コマンドで [ がエスケープできない(ので、安易な解決法に逃げた話)

状況

以下のようなプロンプト*1に対して、自動で y を入力してエンターを押したいです。

Do you want to enable fuzzy auto-completion? ([y]/n)

書いてみた expect のコード

以下のような expect のコード(シェルスクリプト内)を書いてみました*2

expect -c "
  spawn ./install

  expect [y]/n)
  send y\n
"

しかし動きませんでした。例えば、以下のように書いてみたりしました。

  expect \\[y\\]\\/n)
  expect \\\[y\\\]\\\/n)
  expect \"\\\[y\\\]\\\/n)\"

いずれの場合も(いずれの類似組み合わせの場合も)invalid command namemissing close-bracket などのエラーが出て実行できませんでした。

結果

仕方がないので [expect の文字列に含まない形で判定するようにしたら、上手くいきました。ここでハマっていても本質的ではないため、一時的な回避策です。

参考

*1:fzfのインストールスクリプトです

*2:一部省略しています

Powered by はてなブログ