回答編集履歴

1 補足

otn

otn score 39359

2017/03/05 20:36  投稿

spawnでの実行はシェルを介さないので、パイプなどを認識しません。パイプやバッククォートを扱うためにはシェル経由にします。
```Bash
expect -c "
spawn sh -c \"cat /var/log/mysqld.log | grep 'password is generated'\"
expect \".*\"
send \"tes\n\"
expect eof
"
```
質問のものは意味不明な例なので、本当にやりたいことを書いた方が良いですよ。
質問のものは意味不明な例なので、本当にやりたいことを書いた方が良いですよ。
#追記
他回答へのコメントと前後しました。なるほど、途中まで書いただけですか。
一般に、各種プログラミング言語や、各種ツールから「外部コマンドを実行できる」という機能には2種類あります。
・直接OSの機能を呼び出す
・シェルにコマンドラインを渡してあとはシェルに任せる
expextのspawnは前者なので、シェルの機能(シェル組み込みコマンド、リダイレクト、パイプ、変数置換、コマンド置換、ファイル名展開など)は使えません。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る