bashスクリプトでENTERキーをシミュレートする


97

いくつかのコマンドを実行する非常に単純なbashスクリプトを作成しました。これらのコマンドの1つは、実行時にユーザー入力を必要とします。つまり、ユーザーに "何とか何とか何とかしますか?"と尋ねます。スクリプトが完全に自動化されるように、Enterキーをこれに送信するだけです。

実行時に入力や何かを待つ必要はありません。キーを押すだけで十分で、残りは入力バッファで処理されます。


1
自動化しようとしているツールがの場合、apt-get適切な解決策は、debconfデータベースに適切な値を設定することです。その後、それはあなたに尋ねません。
tripleee 2015年

echoの代わりにprintfを使用できます:printf "hello \ n"
hassanzadeh.sd

回答:


133
echo -ne '\n' | <yourfinecommandhere>

またはechoが生成する暗黙の改行を利用する(Marcinに感謝)

echo | <yourfinecommandhere>

これで、--skオプションを使用できます。

--sk--skip-keypress各テスト後にキーを押すのを待たない

すなわち sudo rkhunter --sk --checkall


1
この出力をフィードすると、リテラルである16進数xxdが得られます。もしあなたがそうするだけなら、あなたは 実際にヘクスになってしまいます。したがって、私はあなたのプログラムが必要とするものを使用すると思います。5c6e\necho | xxd0a
Marcin

3
@Marcin、私は驚いています、私は0a0aそれがまだ意図されていないように-nなり、暗黙の改行をサポートします。しかし、もちろんあなたは正しいecho | ...です。ここでは平野がうまく機能します。私の答えを更新します。
Tilman Vogel

えっと、それは私にはあまりよく見えなかったので、私はxxdを通してそれを供給しなければなりませんでした。これは、どのコマンドが出力するかを正確に確認する最も簡単で効率的な方法です。お奨めは愚かなUnixのトリックが大好きです。
Marcin

@Marcin、それでも、なぜあなたは得るの5c6eですか?あなた-eはあなたのシェルを省略しましたか、あなたのシェルechoはそのオプションを扱いませんでしたか?
Tilman Vogel 2011年

私は得ます: echo -ne "\n" | xxd 0000000: 0a そしてecho -n "\n" | xxd 0000000: 5c6eecho "\n" | xxd 0000000: 5c6e 0a 私は一重引用符と二重引用符の間に違いを見ていません。私のシェルは通常のbashですが、そのような基本的な機能の動作を規制する設定はありますか?
Marcin

43

あなたは見つけるかもしれないyesコマンドが便利。

見る man yes


54
yes私はそれが便利だと思います。
Pureferret、2012

2
これは、Enterキーではなく「y」を繰り返し押すことをシミュレートします。これはおそらくあなたがイエス/ノーの質問にしたいことですが、「y」を期待しないものには機能しません。
Burhan Ali

5
@BurhanAli:yes出力として送信する内容を変更できます。manページを読んでください。
シリド

1
デフォルト値を期待するスクリプトに対して複数回「はい」を送信できますか[値] {入力}
AK_

これは、yumなどの場合にのみ機能します。その文字列が期待される場所。
einarc


22

使用例は次のexpectとおりです。

#!/usr/bin/expect
set timeout 360
spawn my_command # Replace with your command.
expect "Do you want to continue?" { send "\r" }

チェック:man expect詳細については。


複数のEnterキーを送信する必要がある場合に特に役立ちます
Andy

これは、特に、異なるstdoutおよびstdin文字列が送信されるpharのようなものに最適な方法です。
einarc

引数がある場合は、my_command argと入力することも忘れないでください。
einarc

11

あなたはexpectを利用することができます(man expectには例付属しています)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.