bashスクリプトでyに自動的に応答するにはどうすればよいですか?


14

bashスクリプトを使用して一部のプログラムをアンインストールしたい。コマンドを実行した後、ターミナルで、アンインストールするかどうかを確認するメッセージが表示されます。だから私は答える必要がありますy。自動でやり直しy、10秒遅れて応答したい。

この例を実行しましたが、機能しません-

#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"

何か案が?Centos 7.2


6
ITYM、#! /bin/bash -代わりに#!/usr/bin
ステファンChazelas

uninstallプログラムがパラメータまたは構成スクリプトを受け入れるかどうかを確認します。その方が簡単です
phuclv

1
ウェブ全体で広告の吐き気を質問し、回答しました。「うまくいかないというのは、問題をうまく説明するものではありません。多分あなたはあなたの問題が無数の他のものとどのように違うかを述べることができます。

2
スクリプトが実際に行うこと:実行uninstallして終了するまで待ちます。その後、10秒間寝ます。次にy\n、標準出力(まだプログラムに接続されておらず、端末に接続されています)にエコーします。
Peter Cordes

回答:


46

これがyesコマンドの目的です。y1行に1つずつ無期限に出力されるため、yes / noの質問をするコマンドにパイプすることができます。

yes | /opt/MNG/MNGVIEWHP/fe/uninstall

これでyすべての質問に答えられます。答えるためにn、すべての質問に、交換してくださいyesyes n。定義済みのミックスのためにyn、あなたは置き換えることができyesて:

printf '%s\n' y n n y y n...

または次のように実行します。

/opt/MNG/MNGVIEWHP/fe/uninstall << 'EOF'
y
n
n
y
y
n
EOF

答えが10秒以内に読めないようにする必要がある場合は、次のようにします。

(sleep 10; echo y; sleep 2; echo n;...) | /opt/MNG/MNGVIEWHP/fe/uninstall

しかし、おそらくそれは必要ではないでしょうy、パイプに書き込むuninstallとき、それがそれを読みたいときにいつでもそれを読むためにそこに行くでしょう、それがそれを読む準備ができるのを待つ必要がありそうもないでしょう。例外はuninstall、質問する前に入力をフラッシュすることを決定した場合です。

それらはすべて、uninstallコマンドが各回答を標準入力から1行の入力として読み取るだけであると想定しています。

より複雑なケースでは、コマンドがttyデバイスから直接回答を読み取る場合や、(たとえば、コマンドの出力に基づいて)条件付きで回答を提供する必要がある場合は、expectまたはzshのようなものを使用しますzpty

多くの対話型プログラムは、いくつかのオプションを渡されると、いくつかの非対話型モードに入る可能性があることに注意してください。問題を回避するために多大な労力を費やす前に、まずマニュアルを確認することをお勧めします。


ありがとう!これは、1つの質問だけに答える必要がある場合には問題ありません。たとえば、20の質問に答えなければならない場合はどうなりますか?
Shalev Sason

@Shalev、編集を参照してください。
ステファンChazelas

よろしくお願いします!だから私が整数のような別の値を入力したい場合(たとえば2)、「y」の代わりにそれを置き換える必要がありますか?printf '%s \ n' ynnyyn 2 3 ny | / opt / MNG / MNGVIEWHP / fe / uninstall
Shalev Sason

はい、それがアイデアです。
ステファンChazelas

3
@ShalevSason、私が提供したすべてのソリューションで、と同様にecho "y"、毎回、をy<newline>押しyてからEnterキーを押すことをシミュレートします。Enterだけを押すことをシミュレートする場合は、空の行をフィードすることになりますprintf '%s\n' y n '' 2 3''空の行はどこですか)。
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.