expect で「色付き文字」や「太文字」を待つためには "set" でエスケープを定義し、"${}" でその定義を読み出して対応する

結論

たとえば以下のように書くと、「太文字」である foobar を待ちます。

set 命令にて bold_black という変数に「太文字にするよ」という内容を定義し、それを用いています。

expect -c '
  set bold_black "\033\[1m"
  expect "${bold_black}foobar"
'

詳細

エスケープ部分は大変に難読です*1。パーツに分けると読みやすいです。

  • \033 はエスケープ文字を定義するぞ、という宣言みたいなものです
  • \[ はエスケープの具体的な内容を記述する箇所を「くくる」ところです
    • expect コマンドの仕様上 [\[ とエスケープしているので難読です
  • 1 というのは「太文字」を表しています
    • 後述の Stack Overflow などを見ると定義が分かります
  • m というのは「エスケープはここで終わるよ」ということを宣言しています

上記をまとめて \033\[1m という記述が、続く文字列を「太文字」にするためのエスケープです。

参考

stackoverflow.com

*1:ターミナルの制約でカラー表現ができない際に、生ログでこのような表記を見たことがあるかもしれません

Powered by はてなブログ