プログラムのインストールに対して「はい」の応答をスクリプト化する方法を教えてください。


113

私はAmazon Linuxインスタンスを使用しており、データを入力して使用するすべてのプログラムをインストールするスクリプトがいくつかありますが、いくつかのプログラムは次のように質問します。

Do you want to continue [Y/n]?

インストールを一時停止します。すべてのケースで「Y」と自動応答したいのですが、どうしたらよいかがわかりました。


3
パッケージマネージャーには、使用できる--nopromptor --noconfirmフラグがある場合があります。
ブレンダー、2011年

回答:


209

「はい」コマンドは、「Y」をエコーします(または、あなたはそれを聞いて何でも)無期限。次のように使用します。

yes | command-that-asks-for-input

または、大文字の「Y」が必要な場合:

yes Y | command-that-asks-for-input

これは、yesからの入力の使用がサポートされているいくつかのコマンドでのみ機能しますか?私はOpenStackから一目で試しましたが、これは機能しません
。Expect

1
//、「はい」という完全な単語を入力する必要がある場合はどうなりますか?
Nathan Basanese

1
yesCPUを最大にすることが知られているので注意してください。 stackoverflow.com/a/18164007/720665
デビッドサラモン

いいね。これは私の人生をかなり簡単にしました。:D また-y、bashスクリプトのグーグルはハードでした。
Nathan Smith

1
@DavidSalamonは、/dev/nullSTDOUT などの制限なしに何かを書き込んでいる場合にのみ当てはまります。コマンドにパイプされると、受信コマンドが1を読み取るたびにパイプに1行だけを書き込み、それ以外の場合は待機します。
Walf

68

echo y | command うまくいくはずです。

また、一部のインストーラーには「auto-yes」フラグがあります。それはだ-yためにapt-getUbuntuの上。


「giturl no」をエコーし​​ようとしています| jspmレジストリは私のシェルスクリプトでregistry_name jspm-gitを作成します。しかし、それは失敗し続けます。ギルを入力しながら。何か案が?
manismku 2017年

別の例:docker-composeには-f--force)フラグがあり、何かを削除するコマンドの「自動はい」として機能します
luke

プロンプトで確認を複数回求められた場合に、どのように「エコーY」を再帰的に実行しますか?
Safak Ozkan、2018

18

ターゲットサーバーにExpectをインストールする機能がない可能性があります。これは、たとえばJenkinsの仕事を書くときによく見られます。

もしそうなら、私はaskubuntu.com上の次の答えのようなものを検討します:

/ubuntu/338857/automatically-enter-input-in-command-line

printf 'y\nyes\nno\nmaybe\n' | ./script_that_needs_user_input

一部のまれなケースでは、コマンドの後にユーザーが文字の後にEnterキーを押す必要がないことに注意してください。その場合は改行を省いてください:

printf 'yyy' | ./script_that_needs_user_input

完全を期すために、ヒアドキュメントを使用することもできます。

./script_that_needs_user_input << EOF
y
y
y
EOF

または、シェルがhere文字列をサポートしている場合:

./script <<< "y
y
y
"

または、1行に1つの入力を含むファイルを作成することもできます。

./script < inputfile

繰り返しになりますが、この回答のクレジットはすべて、askubuntu.com での回答の作成者であるlesmanaに帰属します。


//、この回答が気に入ったら、必ずaskubuntu.comユーザー@lesmanaに賛成票を投じてください。
Nathan Basanese

6

これはあなたが望むよりも複雑/重いかもしれませんが、それを行う非常に柔軟な方法の1つはExpectのようなものを使用することです 1つは、(または別のプログラミング言語の派生物の1つ)のです。

Expectは、テキストベースのアプリケーションを制御するために特別に設計された言語です。結局、もっと複雑なことをする必要がある場合(たとえば、次に何をするか答えるかを実際に決定するロジックを使用するなど)は、Expectが適しています。


6

あなたはただ-yインストールコマンドで置く必要があります。

例えば: yum install <package_to_install> -y


3

デフォルトをそのまま使用したい場合は、以下を使用できます。

\n | ./shell_being_run

//、これはどのようにデフォルトを受け入れるという意味ですか?
Nathan Basanese

2
ではbashsh私が知っているほとんどのシステムでechoは、\nそれ以外の場合は次のコマンドにパイプされない必要があります。
2i3r 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.