2011-09-14 8 views
11

私はUbuntu 11.04でやっていることを自動化するLinuxシェルスクリプトを書いています。Linuxシェルスクリプトで入力確認を処理する

基本的には、NGINX、MySQL、PHPをインストールしてすべてを構成するシェルスクリプトを作成しています。私はコマンドラインからすべてをやる方法を知っています。

しかし、プロセスがユーザー入力を要求する部分をどのように処理するのか分かりません。たとえば、私がapt-getでインストールしたものは、確認のために(Y)esまたは(N)oを要求します。

シェルスクリプトで自動確認をどのくらい正確に処理するか、尋ねられたら自動的に「はい」または「いいえ」を確認しますか?

+0

重複? http://stackoverflow.com/questions/226703/how-do-i-prompt-for-input-in-a-linux-shell-script(助けてください!) – heltonbiker

+0

@heltonbiker:私は取得しようとしていませんシェルスクリプトのユーザーからの入力で、私のスクリプトが通常YesまたはNoの応答を提供するように促していたところで、入力を強制/入力しようとしています。 –

+0

あなたの権利は間違っています、ごめんなさい。 – heltonbiker

答えて

15

yes | ./scriptはすべてyとなります。

そうでない場合は、あなたが望む答え、例えばを出力するスクリプトを記述します。

echo N 
echo Y 
echo Y 
+1

このオプションをありがとう。しかし、これを行うためにスクリプトをどのように構造化すればよいか分かりません。コードサンプルがありますか? –

+0

あなたは常に「はい」と答えたくない場合は、完全に大文字と小文字を区別しているので、あなたの質問は本当にありません。スクリプトに "yes yes no"と答えるには、単純に: 'printf" y \ ny \ nn \ n "| ./answer_script |/your_script'を実行するか、別々の行で簡単なスクリプトを書いて各回答を出力します。 。/ the_script' – wormsparty

+0

ありがとうございました。私は異なるプロンプトに違った答えをしたい場合に備え、複数のオプションがあると思います。これは私がしたいことをやるための最もエレガントな方法で、スクリプトで一度だけ呼び出す必要があるようです。 –

2

Aptの場合、正解は正しいパラメータでdebconfデータベースを「事前設定」することです。 Debconfがそのデータベースから答えを見つけた場合、Debconfは尋ねません。関連項目http://www.debian-administration.org/articles/394

4

通常、このようなインタラクティブなプログラムを呼び出すと、すべての質問に自動的にyesと答えることができます。たとえば、apt-get-yと電話することができます。マニュアルページから:

-y、--yes、--assume-yes 自動yes to prompts;すべてのプロンプトに対する答えとして「はい」とし、 を非対話形式で実行します。

+0

ありがとうございます。これは私が探していたものでした。 –

1

それはあなたが探しているものかもしれませんExpectを試してみてください。

+0

ありがとう、これは非常に興味深いです。プロンプトが何になるかを正確に知る必要があるかどうか、つまりシェルスクリプトで実行しているコマンドが「あなたの生年月日を入力してください:」というようなことをしている場合、Expectの "Enter your birth of date : "プロンプトがそれを求めようとしているのとまったく同じですか? –

+0

私が知る限り - はい – LordDoskias

関連する問題