2017-08-30 19 views
0

私の目標は、後でbashスクリプトで使用できるように、ユーザー入力を配列に読み込むことです。これは、ユーザーが入力して配列に入れる限り、Ctrlキーを押しながらDキーを押してreadarrayコマンドを終了することがわかっている場合にのみ機能します。readarrayキーワード停止値

"done"や "end"のような特定のキーワードにヒットしたら、入力行の読み込みを停止するためにread配列を教えてもらえますか?

私のような、forループ/しばらくしてコマンドを終了する方法を探してみましたが、bashのに新しいですので、私はこれが可能であるかどうかわからないですしました:

echo Type 'done' when finished 
while true 
do 
    readarray -t serverlist 

if [ "$LINE" = "done" ] 
then 
    false 
fi 
done 
+0

おそらく 'break'ですか? 。がんばろう。 – shellter

+0

残念ながら、私が持っているコードはいくつかの点で間違っている可能性が最も高いです。それはCTRL + Dでreadarrayを終了さえしません、私はそれが無限の真のループを作成すると思います。私は休憩を試み、結果は同じです。しかし、応答に感謝! – Mormodes

+0

'while'ループを閉じる' done'がありますか? (上記のコードには表示されていませんが、修正してください)。がんばろう。 – shellter

答えて

1

readarrayですdoneまたはendのようなセンチネルを含め、すべての標準入力を読み込み、テストする機会があります。入力行をreadで1行ずつ読み込み、それぞれの行を自分自身で配列に追加する必要があります。

echo 'Print "done" when finished' 
while IFS= read -r line; do 
    [[ $line = done ]] && break 
    serverlist+=("$line") 
done 
+0

@chepnerありがとう、これは動作しますが、 "$ line = end"を "$ line = done"に変更しました。そうでなければ、入力を停止するために "end"を入力することを期待しています。私は助けに感謝します! – Mormodes